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.
Suponiendo que TreeMap no es bueno para usted (y suponiendo que no puede usar genéricos):
fuente
Usando el
TreeMap
puede ordenar el mapa.fuente
¡Usa un TreeMap !
fuente
Si ya tiene un mapa y desea ordenarlo por teclas, simplemente use:
Un ejemplo de trabajo completo:
fuente
Solo usa TreeMap
Tenga en cuenta que el TreeMap está ordenado de acuerdo con el orden natural de sus 'claves'
fuente
Siempre que no pueda usar
TreeMap
, en Java 8 podemos usar el método toMap () en elCollectors
que toma los siguientes parámetros:Ejemplo de Java 8
Podemos modificar el ejemplo para usar un comparador personalizado y ordenar según las claves como:
fuente
Usando Java 8:
fuente
Este código puede ordenar un mapa clave-valor en ambos órdenes, es decir, ascendente y descendente.
Como ejemplo:
fuente
En Java 8
Para ordenar una
Map<K, V>
por clave, colocando claves en unList<K>
:Para ordenar una
Map<K, V>
por clave, colocando entradas en unList<Map.Entry<K, V>>
:Por último, pero no menos importante: para ordenar las cadenas de manera sensible a la configuración regional, use una clase Collator (comparador):
fuente
fuente
En Java 8 también puede usar .stream (). Sorted ():
fuente
También podemos ordenar la clave utilizando el método Arrays.sort.
fuente
Por si acaso no quieres usar un
TreeMap
Además, en caso de que desee ordenar su mapa en función de
values
solo cambiarMap.Entry::getKey
aMap.Entry::getValue
fuente