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 Mapimplementació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 TreeMapy TreeSettiene 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 TreeMapo TreeSetque tendrá características de rendimiento diferentes que HashMapo 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 TreeMaptiempo 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.