logo

Hoe HashMap in Java te sorteren

Java HashMap behoudt standaard geen enkele volgorde. Als het nodig is om HashMap te sorteren, sorteren we dit expliciet op basis van de vereisten. Java biedt een optie om HashMap te sorteren op basis van sleutels en waarden. In deze sectie leren we hoe we HashMap kunnen sorteren op basis van sleutels en waarden.

  • Sorteer HashMap op sleutels
  • Sorteer HashMap op waarden

Sorteer HashMap op sleutels

Er zijn de volgende manieren om HashMap op sleutels te sorteren:

  • Door het gebruiken van Boomkaart
  • Door het gebruiken van GelinkteHashMap

Wanneer we LinkedHashMap gebruiken, moeten we het proces volgen:

Wanneer we LinkedHashMap gebruiken, moeten we de sleutel instellen. Converteer de set naar een lijst, sorteer de lijst en voeg vervolgens de gesorteerde lijst in dezelfde volgorde toe aan LinkedHashMap. Hetzelfde proces hebben we in het voorbeeld gedaan Sorteer HashMap op waarde .

Voorbeeld van het sorteren van HashMap op sleutels

In het volgende voorbeeld gebruiken we de TreeMap-constructor om de elementen te sorteren en het object van de HashMap-klasse als argument door te geven. Dit is de eenvoudigste manier om HashMap op sleutels te sorteren.

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

Uitgang:

 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 

Sorteer HashMap op waarden met behulp van de Comparator-interface

In Java is het sorteren van HashMap op waarden ingewikkeld omdat er geen directe methode beschikbaar is. Om de HashMap op waarden te sorteren, moeten we een Comparator . Het vergelijkt twee elementen op basis van de waarden.

Haal daarna de set elementen van de kaart en converteer set naar de lijst. Gebruik de Collecties.sort(Lijst) methode om de lijst met elementen op waarden te sorteren door een aangepaste comparator door te geven. Maak nu een nieuwe GelinkteHashMap en kopieer de gesorteerde elementen daarin. Sinds GelinkteHashMap garandeert de invoegvolgorde van toewijzingen. We krijgen een HashMap waarvan de waarden in gesorteerde volgorde staan.

gebruik van besturingssysteem

Er is een klein verschil tussen het sorteren van HashMap op sleutels en waarden, namelijk dat het dubbele waarden kan hebben, maar geen dubbele sleutels. We kunnen TreeMap niet gebruiken om waarden te sorteren, omdat TreeMap elementen op sleutels sorteert.

Voorbeeld van het sorteren van HashMap op waarden

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

Uitgang:

 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