logo

Cum să sortați HashMap în Java

Java HashMap nu păstrează nicio ordine în mod implicit. Dacă este nevoie să sortăm HashMap, îl sortăm în mod explicit în funcție de cerințe. Java oferă o opțiune de sortare HashMap în funcție de chei și valori. În această secțiune, vom învăța cum să sortăm HashMap în funcție de chei și valori.

  • Sortați HashMap după chei
  • Sortați HashMap după valori

Sortați HashMap după chei

Există următoarele moduri de a sorta HashMap după chei:

  • Prin utilizarea Harta copacului
  • Prin utilizarea LinkedHashMap

Când folosim LinkedHashMap, ar trebui să urmăm procesul:

Când folosim LinkedHashMap, atunci trebuie să obținem cheia setată. Convertiți setul în listă, sortați lista și apoi adăugați lista sortată în LinkedHashMap în aceeași ordine. Același proces pe care l-am făcut în exemplu Sortați HashMap după valoare .

Exemplu de sortare HashMap după chei

În exemplul următor, folosim constructorul TreeMap pentru a sorta elementele și pentru a trece obiectul clasei HashMap ca argument. Acesta este cel mai simplu mod de a sorta HashMap după chei.

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

Ieșire:

 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 

Sortați HashMap după valori folosind Interfața de comparație

În Java, sortarea HashMap după valori este complicată, deoarece nu există nicio metodă directă disponibilă. Pentru a sorta HashMap după valori, trebuie să creăm un Comparator . Compară două elemente pe baza valorilor.

După aceea, obțineți Setul de elemente de pe Hartă și convertiți Setul în Listă. Folosește Collections.sort(Lista) metoda de sortare a listei de elemente după valori prin trecerea unui comparator personalizat. Acum creați un nou LinkedHashMap și copiați elementele sortate în acesta. De cand LinkedHashMap garantează ordinea de inserare a mapărilor. Obținem un HashMap ale cărui valori sunt în ordine sortată.

js settimeout

Există o mică diferență între sortarea HashMap după chei și valori este că poate avea valori duplicate, dar nu chei duplicate. Nu putem folosi TreeMap pentru a sorta valori deoarece TreeMap sortează elementele după chei.

Exemplu de sortare HashMap după valori

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

Ieșire:

 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