Respuesta corta
Use a TreeMap
. Esto es precisamente para lo que sirve.
Si se le pasa este mapa y no puede determinar el tipo, puede hacer lo siguiente:
SortedSet<String> keys = new TreeSet<>(map.keySet());
for (String key : keys) {
String value = map.get(key);
// do something
}
Esto iterará a través del mapa en el orden natural de las teclas.
Respuesta más larga
Técnicamente, puede usar cualquier cosa que implemente SortedMap
, pero excepto en casos excepcionales, esto equivale a TreeMap
, al igual que el uso de una Map
implementación HashMap
.
Para los casos en que sus claves son de un tipo complejo que no implementa Comparable o si no desea utilizar el orden natural en ese momento TreeMap
y TreeSet
tiene constructores adicionales que le permiten pasar a Comparator
:
// placed inline for the demonstration, but doesn't have to be a lambda expression
Comparator<Foo> comparator = (Foo o1, Foo o2) -> {
...
}
SortedSet<Foo> keys = new TreeSet<>(comparator);
keys.addAll(map.keySet());
Recuerde cuando use un TreeMap
o TreeSet
que tendrá características de rendimiento diferentes que HashMap
o HashSet
. En términos generales, las operaciones que encuentran o insertan un elemento irán de O (1) a O (Log (N)) .
En un caso HashMap
, pasar de 1000 artículos a 10,000 realmente no afecta su tiempo para buscar un elemento, pero para un TreeMap
tiempo de búsqueda será aproximadamente 3 veces más lento (suponiendo el Registro 2 ). Pasar de 1000 a 100,000 será aproximadamente 6 veces más lento para cada búsqueda de elementos.