logo

Jak sortować HashMap w Javie

Java HashMap domyślnie nie zachowuje żadnej kolejności. Jeśli istnieje potrzeba sortowania HashMap, sortujemy ją jawnie w oparciu o wymagania. Java udostępnia opcję sortowania HashMap na podstawie kluczy i wartości. W tej sekcji dowiemy się, jak sortować HashMap według kluczy i wartości.

  • Sortuj HashMap według kluczy
  • Sortuj HashMap według wartości

Sortuj HashMap według kluczy

Istnieją następujące sposoby sortowania HashMap według kluczy:

  • Używając Mapa Drzewa
  • Używając Połączona mapa Hash

Kiedy korzystamy z LinkedHashMap, powinniśmy postępować zgodnie z procesem:

Kiedy używamy LinkedHashMap, musimy ustawić klucz. Przekonwertuj zestaw na listę, posortuj listę, a następnie dodaj posortowaną listę do LinkedHashMap w tej samej kolejności. Ten sam proces, który zrobiliśmy w przykładzie Sortuj HashMap według wartości .

Przykład sortowania HashMap według kluczy

W poniższym przykładzie używamy konstruktora TreeMap do sortowania elementów i przekazujemy obiekt klasy HashMap jako argument. To najprostszy sposób sortowania HashMap według kluczy.

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

Wyjście:

 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 

Sortuj HashMap według wartości za pomocą interfejsu komparatora

W Javie sortowanie HashMap według wartości jest skomplikowane, ponieważ nie jest dostępna żadna metoda bezpośrednia. Aby posortować HashMap według wartości, musimy utworzyć plik Komparator . Porównuje dwa elementy na podstawie wartości.

Następnie pobierz zestaw elementów z mapy i przekonwertuj zestaw na listę. Użyj Kolekcje.sort(Lista) metoda sortowania listy elementów według wartości poprzez przekazanie dostosowanego komparatora. Teraz utwórz nowy Połączona mapa Hash i skopiuj do niego posortowane elementy. Od Połączona mapa Hash gwarantuje kolejność wstawiania mapowań. Otrzymujemy HashMap, którego wartości są posortowane.

sterta i sortowanie po stercie

Istnieje niewielka różnica między sortowaniem HashMap według kluczy i wartości polega na tym, że może mieć zduplikowane wartości, ale nie duplikaty kluczy. Nie możemy używać TreeMap do sortowania wartości, ponieważ TreeMap sortuje elementy według kluczy.

Przykład sortowania HashMap według wartości

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

Wyjście:

 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