2012-09-01 22 views
5

Duplicar posible:
How to sort a Map<Key, Value> on the values in Java?java HashMap clasificación <String, Entero>. ¿Cómo ordenarlo?

En mi proyecto, he tomado un HashMap como esto

grado HashMap = new HashMap();

Supongamos que tengo:

degree.put("a",5); 
degree.put("b",2); 
degree.put("c",4); 
degree.put("d",2); 
degree.put("e",3); 
degree.put("f",5); 

ahora tengo que ordenar esta lista de acuerdo con la dada en valores enteros

Ordenado HashMap debe ser:

{a = 5, f = 5, c = 4, e = 4, b = 4, d = 2}

¿Cómo puedo hacer esto?

+0

Me parece que el HashMap original ordenado según los valores enteros sería, de hecho, como {a = 5, f = 5, c = 4, e = 3, b = 2, d = 2}. –

+0

Mira esto http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java – SiB

Respuesta

11

A HashMap es un desordenado colección. No tiene orden de clasificación. Incluso un TreeMap ordenará por clave, no por valor.

Si desea preparar una lista ordenada por el orden de los valores, se tendrá que crear un objeto apropiado, tal como un ArrayList<Map.Entry<String,Integer>>, iterar sobre su HashMap e insertar todas las entradas, y luego llamar con Collections.sort una función de intercalación

4

Si desea un mapa ordenado, HashMap no es el mejor enfoque.

Sugiero echar un vistazo a TreeMap como está ordenado. Es posible ajustar el comparador para comparar los valores en lugar de las teclas, como lo hacen en esta respuesta:

https://stackoverflow.com/a/1283722/975959

+0

Es mejor no planear llamar a .get() en ese TreeMap si está mirando valores – bmargulies

0

Usted puede hacer insertion sort para construir un nuevo mapa hash del original (toma de memoria x2 y es muy ineficiente) Por lo tanto, necesitará usar los métodos .get() y .set() del hashmap casi n * n (peor caso) veces donde n es el número de elementos.

1
ArrayList<Integer> sortedHashMap=new ArrayList<Integer>(); 

for("your Object" m : degree.values()) 
{ 
     sortedHashMap.add(m); 
} 

collections.sort(sortedHashMap); 

Así que puede imprimir su hashMap como hashMap!

Cuestiones relacionadas