Por Chaitanya Singh | Filed Under: Colecciones de Java
Como sabemos que HashMap no conserva ningún orden por defecto. Si hay una necesidad, necesitamos ordenarlo explícitamente basado en el requerimiento. En este tutorial aprenderemos a ordenarlas teclas de HashMapby usando TreeMap y por valores usando el Comparador.
Ordenación de HashMap por claves
En este ejemplo estamos ordenando el HashMap basado en las claves usando la clase de colección TreeMap.
paquete beginnersbook.com;importar java.util.HashMap;importar java.util.Map;importar java.util.TreeMap;importar java.util.Set;importar java.util.Iterator;public class Details { public static void main(String[] args) { HashMap<Integer, String> hmap = new HashMap<Integer, String>(); hmap.put(5, "A"); hmap.put(11, "C"); hmap.put(4, "Z"); hmap.put(77, "Y"); hmap.put(9, "P"); hmap.put(66, "Q"); hmap.put(0, "R"); System.out.println("Before Sorting:"); Set set = hmap.entrySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { Map.Entry me = (Map.Entry)iterator.next(); System.out.print(me.getKey() + ": "); System.out.println(me.getValue()); } Map<Integer, String> map = new TreeMap<Integer, String>(hmap); 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.print(me2.getKey() + ": "); System.out.println(me2.getValue()); } }}
Salida:
Antes de la clasificación: 0: R4: Z5: A66: Q9: P77: Y11: Después de la clasificación: 0: R4: Z5: A9: P11: C66: Q77: Y
HashMap clasificando por valores
En este ejemplo estamos ordenando HashMap por valores usando el Comparador.
paquete beginnersbook.com;importar java.util.Collections;importar java.util.Comparator;importar java.util.HashMap;importar java.util.Iterator;importar java.util.LinkedHashMap;importar java.util.LinkedList;importar java.util.List;importar java.util.Map;importar java.util.Set;public class HMapSortingByvalues { public static void main(String[] args) { HashMap<Integer, String> hmap = new HashMap<Integer, String>(); hmap.put(5, "A"); hmap.put(11, "C"); hmap.put(4, "Z"); hmap.put(77, "Y"); hmap.put(9, "P"); hmap.put(66, "Q"); hmap.put(0, "R"); System.out.println("Before Sorting:"); Set set = hmap.entrySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { Map.Entry me = (Map.Entry)iterator.next(); System.out.print(me.getKey() + ": "); System.out.println(me.getValue()); } Map<Integer, String> map = sortByValues(hmap); 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.print(me2.getKey() + ": "); System.out.println(me2.getValue()); } } HashMap estático privado sortByValues(HashMap map) { Lista lista = nuevo LinkedList(map.entrySet()); // Comparador personalizado definido aquí Collections.sort(list, new Comparator() { public int compare(Object o1, Object o2) { return ((Comparable) ((Map.Entry) (o1))).getValue()) .compareTo((Map.Entry) (o2)).getValue()); } }); // Aquí estoy copiando la lista ordenada en HashMap // usando LinkedHashMap para preservar el orden de inserción 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; }}
Salida:
Antes de la clasificación: 0: R4: Z5: A66: Q9: P77: Y11: Después de la clasificación:5: A11: C9: P66: Q0: R77: Y4: Z
Referencias:
- Cómo anular el método toString para ArrayList en Java
- Interfaz de la cola en las colecciones de Java
- ArrayList en java con programas de ejemplo – Collections Framework
- Java – Eliminar elementos específicos del ejemplo de LinkedList
- Java ArrayList get() Ejemplo de método
- Cómo hacer un bucle de ArrayList en Java
Comentarios
- Nareshsays 28 de abril de 2015 a las 2:43 PMNota: el programa de abajo funcionará, no hay que preocuparse por los genéricos.importar java.util.*;clase pública SortHashMapValues{public static void main(String []args){Map map=new HashMap();map.put(«one»,1);map.put(«ten»,10);map.put(«three»,3);map.put(«two»,2); List list=new ArrayList(map.entrySet()); Collections.sort(list,new Comparator(){public int compare(Object obj1, Object obj2){return ((Comparable)((Map.Entry)(obj1)).getValue()).compareTo(((Map.Entry)(obj2)).getValue());}});System.out.println(list);}}Reply
- Grupojrcsays10 de septiembre de 2015 a las 3:44 PMHola en «HashMap Sorting by Values» si añades:hmap.put(900, «Ó»);hmap.put(9, «é»);El resultado es:After Sorting:5: A11: C66: Q0: R77: Y4: Z900: Ó9: éIs no es correcto.Responder
- Johnsays23 de diciembre de 2015 a las 7:14 PMHola, Clasificar por Claves clasificado ascendente, ¿cómo puedo clasificar descendente? ¿podríais enviar un ejemplo? Suelo visitar vuestro sitio, gracias. RespuestaNicksays4 de noviembre de 2016 a las 9:13 PMPara cambiar el orden de clasificación de ascendente a descendente, simplemente haz el siguiente cambio en el Comparador (cambia el orden en el que se comparan los objetos, el único cambio es 02.)getValue se llama antes de 01.getValue).Collections.sort(list, new Comparator() {public int compare(Object o1, Object o2) {return ((Comparable) ((Map.Entry) (o2)).getValue()).compareTo((Map.Entry) (o1)).getValue());}Reply