Java HashMap pēc noklusējuma nesaglabā nekādu kārtību. Ja ir nepieciešams kārtot HashMap, mēs to kārtojam, pamatojoties uz prasībām. Java nodrošina iespēju kārtot HashMap, pamatojoties uz atslēgām un vērtībām. Šajā sadaļā mēs uzzināsim, kā kārtot HashMap pēc atslēgām un vērtībām.
- Kārtot HashMap pēc taustiņiem
- Kārtojiet HashMap pēc vērtībām
Kārtot HashMap pēc taustiņiem
Ir šādi veidi, kā kārtot HashMap pēc atslēgām:
- Izmantojot TreeMap
- Izmantojot LinkedHashMap
Kad mēs izmantojam LinkedHashMap, mums jāievēro process:
Kad mēs izmantojam LinkedHashMap, mums ir jāiegūst atslēga. Konvertējiet kopu par sarakstu, kārtojiet sarakstu un pēc tam pievienojiet sakārtoto sarakstu LinkedHashMap tādā pašā secībā. Tas pats process, ko mēs veicām piemērā Kārtojiet HashMap pēc vērtības .
HashMap kārtošanas piemērs pēc atslēgām
Nākamajā piemērā mēs izmantojam TreeMap konstruktoru, lai kārtotu elementus un nodotu HashMap klases objektu kā argumentu. Šis ir vienkāršākais veids, kā kārtot HashMap pēc atslēgām.
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)); } } }
Izvade:
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
Kārtojiet HashMap pēc vērtībām, izmantojot salīdzināšanas interfeisu
Java programmā HashMap kārtošana pēc vērtībām ir sarežģīta, jo nav pieejama tieša metode. Lai kārtotu HashMap pēc vērtībām, mums ir jāizveido a Salīdzinātājs . Tas salīdzina divus elementus, pamatojoties uz vērtībām.
Pēc tam iegūstiet elementu kopu no kartes un pārveidojiet kopu par sarakstu. Izmantojiet Collections.sort(saraksts) metode, lai kārtotu elementu sarakstu pēc vērtībām, nododot pielāgotu salīdzinātāju. Tagad izveidojiet jaunu LinkedHashMap un kopējiet tajā sakārtotos elementus. Kopš LinkedHashMap garantē kartējumu ievietošanas secību. Mēs iegūstam HashMap, kuras vērtības ir sakārtotas secībā.
lateksa galds
Pastāv neliela atšķirība starp HashMap kārtošanu pēc atslēgām un vērtībām, jo tai var būt dublētās vērtības, bet ne dublētās atslēgas. Mēs nevaram izmantot TreeMap vērtību kārtošanai, jo TreeMap kārto elementus pēc atslēgām.
HashMap kārtošanas piemērs pēc vērtībām
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; } }
Izvade:
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