Java HashMap bevarer som standard ingen rækkefølge. Hvis der er behov for at sortere HashMap, sorterer vi det eksplicit ud fra kravene. Java giver mulighed for at sortere HashMap baseret på nøgler og værdier. I dette afsnit lærer vi, hvordan du sorterer HashMap efter nøgler og værdier.
- Sorter HashMap efter nøgler
- Sorter HashMap efter værdier
Sorter HashMap efter nøgler
Der er følgende måder at sortere HashMap efter nøgler:
- Ved hjælp af Trækort
- Ved hjælp af LinkedHashMap
Når vi bruger LinkedHashMap, bør vi følge processen:
Når vi bruger LinkedHashMap, så skal vi have Key sat. Konverter sættet til liste, sorter listen og tilføj derefter den sorterede liste til LinkedHashMap i samme rækkefølge. Den samme proces har vi gjort i eksemplet Sorter HashMap efter værdi .
Eksempel på sortering af HashMap efter nøgler
I det følgende eksempel bruger vi TreeMap-konstruktøren til at sortere elementerne og sende objektet i HashMap-klassen som et argument. Dette er den enkleste måde at sortere HashMap efter nøgler.
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)); } } }
Produktion:
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
Sorter HashMap efter værdier ved hjælp af Comparator Interface
I Java er sortering af HashMap efter værdier kompliceret, fordi der ikke er nogen direkte metode tilgængelig. For at sortere HashMap efter værdier skal vi oprette en Komparator . Den sammenligner to elementer baseret på værdierne.
Hent derefter sættet af elementer fra kortet og konverter sæt til listen. Brug Collections.sort(List) metode til at sortere listen over elementer efter værdier ved at videregive tilpasset komparator. Opret nu en ny LinkedHashMap og kopier de sorterede elementer ind i det. Siden LinkedHashMap garanterer indsættelsesrækkefølgen af kortlægninger. Vi får et HashMap, hvis værdier er i sorteret rækkefølge.
forskel mellem firma og virksomhed
Der er en lille forskel mellem at sortere HashMap efter nøgler og værdier er, at det kan have duplikerede værdier, men ikke duplikerede nøgler. Vi kan ikke bruge TreeMap til at sortere værdier, fordi TreeMap sorterer elementer efter nøgler.
Eksempel på sortering af HashMap efter værdier
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; } }
Produktion:
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