Java HashMap bevarar inte någon ordning som standard. Om det finns ett behov av att sortera HashMap sorterar vi det uttryckligen utifrån kraven. Java erbjuder ett alternativ för att sortera HashMap baserat på nycklar och värden. I det här avsnittet kommer vi att lära oss hur man sorterar HashMap efter nycklar och värden.
- Sortera HashMap efter nycklar
- Sortera HashMap efter värden
Sortera HashMap efter nycklar
Det finns följande sätt att sortera HashMap efter nycklar:
- Genom att använda Trädkarta
- Genom att använda LinkedHashMap
När vi använder LinkedHashMap bör vi följa processen:
När vi använder LinkedHashMap måste vi ställa in nyckeln. Konvertera uppsättningen till lista, sortera listan och lägg sedan till den sorterade listan i LinkedHashMap i samma ordning. Samma process som vi har gjort i exemplet Sortera HashMap efter värde .
Exempel på sortering av HashMap efter nycklar
I följande exempel använder vi TreeMap-konstruktorn för att sortera elementen och skicka objektet i HashMap-klassen som ett argument. Detta är det enklaste sättet att sortera HashMap efter nycklar.
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
Sortera HashMap efter värden med hjälp av Comparator Interface
I Java är det komplicerat att sortera HashMap efter värden eftersom det inte finns någon direkt metod tillgänglig. För att sortera HashMap efter värden måste vi skapa en Komparator . Den jämför två element baserat på värdena.
Efter det hämta uppsättningen av element från kartan och konvertera uppsättningen till listan. Använd Collections.sort(List) metod för att sortera listan med element efter värden genom att skicka anpassad komparator. Skapa nu en ny LinkedHashMap och kopiera de sorterade elementen till det. Eftersom LinkedHashMap garanterar insättningsordningen för mappningar. Vi får en HashMap vars värden är i sorterad ordning.
blockera annonser på youtube android
Det finns en liten skillnad mellan att sortera HashMap efter nycklar och värden är att den kan ha dubbletter av värden men inte dubbletter av nycklar. Vi kan inte använda TreeMap för att sortera värden eftersom TreeMap sorterar element efter nycklar.
Exempel på sortering av HashMap efter värden
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