Java HashMap ei säilytä mitään järjestystä oletuksena. Jos HashMap on tarpeen lajitella, lajittelemme sen nimenomaisesti vaatimusten perusteella. Java tarjoaa mahdollisuuden lajitella HashMap avainten ja arvojen perusteella. Tässä osiossa opimme lajittelemaan HashMapin avainten ja arvojen mukaan.
- Lajittele HashMap avainten mukaan
- Lajittele HashMap arvojen mukaan
Lajittele HashMap avainten mukaan
On olemassa seuraavia tapoja lajitella HashMap avainten mukaan:
- Käyttämällä TreeMap
- Käyttämällä LinkedHashMap
Kun käytämme LinkedHashMapia, meidän tulee seurata prosessia:
Kun käytämme LinkedHashMapia, meidän on asetettava avain. Muunna joukko luetteloksi, lajittele luettelo ja lisää sitten lajiteltu luettelo LinkedHashMapiin samassa järjestyksessä. Sama prosessi, jonka teimme esimerkissä Lajittele HashMap arvon mukaan .
Esimerkki HashMapin lajittelusta avainten mukaan
Seuraavassa esimerkissä käytämme TreeMap-konstruktoria elementtien lajitteluun ja HashMap-luokan objektin välittämiseen argumenttina. Tämä on yksinkertaisin tapa lajitella HashMap avainten mukaan.
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)); } } }
Lähtö:
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
Lajittele HashMap arvojen mukaan käyttämällä vertailuliittymää
Javassa HashMapin lajittelu arvojen mukaan on monimutkaista, koska suoraa menetelmää ei ole käytettävissä. Lajitellaksesi HashMapin arvojen mukaan, meidän on luotava a Vertailija . Se vertaa kahta elementtiä arvojen perusteella.
Tämän jälkeen hanki elementtijoukko kartasta ja muunna joukko luetteloksi. Käytä Collections.sort(Lista) menetelmä lajitella elementtiluettelo arvojen mukaan ohittamalla mukautettu vertailija. Luo nyt uusi LinkedHashMap ja kopioi lajitellut elementit siihen. Siitä asti kun LinkedHashMap takaa kartoitusten lisäysjärjestyksen. Saamme HashMapin, jonka arvot ovat lajiteltuina.
Linuxin hakemiston uudelleennimeäminen
HashMapin lajittelussa avainten ja arvojen mukaan on pieni ero, että sillä voi olla päällekkäisiä arvoja, mutta ei päällekkäisiä avaimia. Emme voi käyttää TreeMapia arvojen lajitteluun, koska TreeMap lajittelee elementit avainten mukaan.
Esimerkki HashMapin lajittelusta arvojen mukaan
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; } }
Lähtö:
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