Java HashMap behält standardmäßig keine Reihenfolge bei. Wenn HashMap sortiert werden muss, sortieren wir es explizit basierend auf den Anforderungen. Java bietet eine Option zum Sortieren von HashMap basierend auf Schlüsseln und Werten. In diesem Abschnitt erfahren Sie, wie Sie HashMap nach Schlüsseln und Werten sortieren.
- Sortieren Sie HashMap nach Schlüsseln
- HashMap nach Werten sortieren
Sortieren Sie HashMap nach Schlüsseln
Es gibt folgende Möglichkeiten, HashMap nach Schlüsseln zu sortieren:
- Durch die Nutzung TreeMap
- Durch die Nutzung LinkedHashMap
Wenn wir LinkedHashMap verwenden, sollten wir dem Prozess folgen:
Wenn wir LinkedHashMap verwenden, müssen wir den Schlüssel festlegen. Konvertieren Sie den Satz in eine Liste, sortieren Sie die Liste und fügen Sie die sortierte Liste dann in derselben Reihenfolge zu LinkedHashMap hinzu. Den gleichen Vorgang haben wir im Beispiel durchgeführt HashMap nach Wert sortieren .
Beispiel für die Sortierung von HashMap nach Schlüsseln
Im folgenden Beispiel verwenden wir den TreeMap-Konstruktor, um die Elemente zu sortieren und das Objekt der HashMap-Klasse als Argument zu übergeben. Dies ist die einfachste Möglichkeit, HashMap nach Schlüsseln zu sortieren.
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)); } } }
Ausgabe:
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
Sortieren Sie HashMap nach Werten mithilfe der Komparatorschnittstelle
In Java ist das Sortieren von HashMap nach Werten kompliziert, da keine direkte Methode verfügbar ist. Um die HashMap nach Werten zu sortieren, müssen wir eine erstellen Komparator . Es vergleicht zwei Elemente anhand der Werte.
Holen Sie sich anschließend die Menge der Elemente aus der Karte und konvertieren Sie die Menge in die Liste. Benutzen Sie die Collections.sort(Liste) Methode zum Sortieren der Liste der Elemente nach Werten durch Übergabe eines benutzerdefinierten Komparators. Erstellen Sie nun ein neues LinkedHashMap und kopieren Sie die sortierten Elemente hinein. Seit LinkedHashMap garantiert die Einfügereihenfolge von Zuordnungen. Wir erhalten eine HashMap, deren Werte in sortierter Reihenfolge vorliegen.
groovige Computersprache
Es gibt einen kleinen Unterschied zwischen der Sortierung von HashMap nach Schlüsseln und Werten: Es kann doppelte Werte, aber keine doppelten Schlüssel geben. Wir können TreeMap nicht zum Sortieren von Werten verwenden, da TreeMap Elemente nach Schlüsseln sortiert.
Beispiel für die Sortierung von HashMap nach Werten
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; } }
Ausgabe:
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