Cómo clasificar HashMap en Java por claves y valores

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

Tabla de contenidos

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:

  1. Cómo anular el método toString para ArrayList en Java
  2. Interfaz de la cola en las colecciones de Java
  3. ArrayList en java con programas de ejemplo – Collections Framework
  4. Java – Eliminar elementos específicos del ejemplo de LinkedList
  5. Java ArrayList get() Ejemplo de método
  6. Cómo hacer un bucle de ArrayList en Java

Comentarios

  1. 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
  2. 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
  3. 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
Rate this post

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio