logo

Cómo ordenar HashMap en Java

Java HashMap no conserva ningún orden de forma predeterminada. Si es necesario ordenar HashMap, lo ordenamos explícitamente según los requisitos. Java proporciona una opción para ordenar HashMap según claves y valores. En esta sección, aprenderemos cómo ordenar HashMap según claves y valores.

  • Ordenar HashMap por claves
  • Ordenar HashMap por valores

Ordenar HashMap por claves

Existen las siguientes formas de ordenar HashMap por claves:

  • Mediante el uso ÁrbolMapa
  • Mediante el uso LinkedHashMap

Cuando usamos LinkedHashMap, debemos seguir el proceso:

Cuando usamos LinkedHashMap, necesitamos configurar la clave. Convierta el conjunto en lista, ordene la lista y luego agregue la lista ordenada a LinkedHashMap en el mismo orden. El mismo proceso que hemos hecho en el ejemplo. Ordenar HashMap por valor .

Ejemplo de clasificación de HashMap por claves

En el siguiente ejemplo, utilizamos el constructor TreeMap para ordenar los elementos y pasar el objeto de la clase HashMap como argumento. Esta es la forma más sencilla de ordenar HashMap por claves.

 import java.util.Map; import java.util.HashMap; import java.util.TreeMap; import java.util.Iterator; public class SortHashMapByKeys { public static void main(String args[]) { //implementation of HashMap HashMap hm=new HashMap(); //addding keys and values to HashMap hm.put(23, 'Yash'); hm.put(17, 'Arun'); hm.put(15, 'Swarit'); hm.put(9, 'Neelesh'); Iterator it = hm.keySet().iterator(); System.out.println('Before Sorting'); while(it.hasNext()) { int key=(int)it.next(); System.out.println('Roll no: '+key+' name: '+hm.get(key)); } System.out.println('
'); Map map=new HashMap(); System.out.println('After Sorting'); //using TreeMap constructor to sort the HashMap TreeMap tm=new TreeMap (hm); Iterator itr=tm.keySet().iterator(); while(itr.hasNext()) { int key=(int)itr.next(); System.out.println('Roll no: '+key+' name: '+hm.get(key)); } } } 

Producción:

 Before Sorting Roll no: 17 name: Arun Roll no: 23 name: Yash Roll no: 9 name: Neelesh Roll no: 15 name: Swarit After Sorting Roll no: 9 name: Neelesh Roll no: 15 name: Swarit Roll no: 17 name: Arun Roll no: 23 name: Yash 

Ordenar HashMap por valores usando la interfaz de comparación

En Java, ordenar HashMap por valores es complicado porque no hay ningún método directo disponible. Para ordenar el HashMap por valores, necesitamos crear un Comparador . Compara dos elementos en función de los valores.

Después de eso, obtenga el conjunto de elementos del mapa y convierta el conjunto en la lista. Utilizar el Colecciones.sort(Lista) Método para ordenar la lista de elementos por valores pasando un comparador personalizado. Ahora crea un nuevo LinkedHashMap y copie los elementos ordenados en eso. Desde LinkedHashMap Garantiza el orden de inserción de las asignaciones. Obtenemos un HashMap cuyos valores están ordenados.

etiquetas html

Existe una ligera diferencia entre ordenar HashMap por claves y valores: puede tener valores duplicados pero no claves duplicadas. No podemos usar TreeMap para ordenar valores porque TreeMap ordena elementos por claves.

Ejemplo de ordenar HashMap por valores

 import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; public class SortHashMapValue { public static void main(String[] args) { //implementing HashMap HashMap hm = new HashMap(); hm.put(6, 'Tushar'); hm.put(12, 'Ashu'); hm.put(5, 'Zoya'); hm.put(78, 'Yash'); hm.put(10, 'Praveen'); hm.put(67, 'Boby'); hm.put(1, 'Ritesh'); System.out.println('Before Sorting:'); Set set = hm.entrySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { Map.Entry map = (Map.Entry)iterator.next(); System.out.println('Roll no: '+map.getKey()+' Name: '+map.getValue()); } Map map = sortValues(hm); System.out.println('
'); System.out.println('After Sorting:'); Set set2 = map.entrySet(); Iterator iterator2 = set2.iterator(); while(iterator2.hasNext()) { Map.Entry me2 = (Map.Entry)iterator2.next(); System.out.println('Roll no: '+me2.getKey()+' Name: '+me2.getValue()); } } //method to sort values private static HashMap sortValues(HashMap map) { List list = new LinkedList(map.entrySet()); //Custom Comparator Collections.sort(list, new Comparator() { public int compare(Object o1, Object o2) { return ((Comparable) ((Map.Entry) (o1)).getValue()).compareTo(((Map.Entry) (o2)).getValue()); } }); //copying the sorted list in HashMap to preserve the iteration order HashMap sortedHashMap = new LinkedHashMap(); for (Iterator it = list.iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); sortedHashMap.put(entry.getKey(), entry.getValue()); } return sortedHashMap; } } 

Producción:

 Before Sorting: Roll no: 1 Name: Ritesh Roll no: 67 Name: Boby Roll no: 5 Name: Zoya Roll no: 6 Name: Tushar Roll no: 10 Name: Praveen Roll no: 12 Name: Ashu Roll no: 78 Name: Yash After Sorting: Roll no: 12 Name: Ashu Roll no: 67 Name: Boby Roll no: 10 Name: Praveen Roll no: 1 Name: Ritesh Roll no: 6 Name: Tushar Roll no: 78 Name: Yash Roll no: 5 Name: Zoya