logo

Comment trier HashMap en Java

Java HashMap ne conserve aucun ordre par défaut. S'il est nécessaire de trier HashMap, nous le trions explicitement en fonction des exigences. Java fournit une option pour trier HashMap en fonction des clés et des valeurs. Dans cette section, nous apprendrons comment trier HashMap en fonction des clés et des valeurs.

  • Trier HashMap par clés
  • Trier HashMap par valeurs

Trier HashMap par clés

Il existe les manières suivantes de trier HashMap par clés :

  • En utilisant ArbreCarte
  • En utilisant LinkedHashMap

Lorsque nous utilisons LinkedHashMap, nous devons suivre le processus :

Lorsque nous utilisons LinkedHashMap, nous devons alors définir le jeu de clés. Convertissez l'ensemble en liste, triez la liste, puis ajoutez la liste triée dans LinkedHashMap dans le même ordre. Le même processus que nous avons fait dans l'exemple Trier HashMap par valeur .

Exemple de tri de HashMap par clés

Dans l'exemple suivant, nous utilisons le constructeur TreeMap pour trier les éléments et passer l'objet de la classe HashMap comme argument. C'est le moyen le plus simple de trier HashMap par clés.

 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)); } } } 

Sortir:

 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 

Trier HashMap par valeurs à l'aide de l'interface de comparaison

En Java, trier HashMap par valeurs est compliqué car aucune méthode directe n’est disponible. Pour trier le HashMap par valeurs, nous devons créer un Comparateur . Il compare deux éléments en fonction des valeurs.

Après cela, récupérez l’ensemble d’éléments de la carte et convertissez l’ensemble en liste. Utilisez le Collections.sort(Liste) méthode pour trier la liste des éléments par valeurs en passant un comparateur personnalisé. Créez maintenant un nouveau LinkedHashMap et copiez-y les éléments triés. Depuis LinkedHashMap garantit l’ordre d’insertion des mappages. Nous obtenons un HashMap dont les valeurs sont triées.

point java

Il existe une légère différence entre le tri de HashMap par clés et valeurs, c'est qu'il peut avoir des valeurs en double mais pas des clés en double. Nous ne pouvons pas utiliser TreeMap pour trier les valeurs car TreeMap trie les éléments par clés.

Exemple de tri HashMap par valeurs

 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; } } 

Sortir:

 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