logo

כיצד למיין HashMap ב-Java

Java HashMap אינו משמר שום סדר כברירת מחדל. אם יש צורך במיון HashMap אנו ממיינים אותו במפורש על סמך הדרישות. Java מספקת אפשרות למיין HashMap על סמך מפתחות וערכים. בחלק זה נלמד כיצד למיין את HashMap לפי מפתחות וערכים.

  • מיין HashMap לפי מפתחות
  • מיין HashMap לפי ערכים

מיין HashMap לפי מפתחות

ישנן דרכים הבאות למיין את HashMap לפי מפתחות:

  • על ידי שימוש ב מפת עץ
  • על ידי שימוש ב LinkedHashMap

כאשר אנו משתמשים ב-LinkedHashMap, עלינו לעקוב אחר התהליך:

כאשר אנו משתמשים ב-LinkedHashMap, אנו צריכים להגדיר מפתח. המר את הסט לרשימה, מיין את הרשימה ואז הוסף את הרשימה הממוינת ל-LinkedHashMap באותו סדר. אותו תהליך שעשינו בדוגמה מיין HashMap לפי ערך .

דוגמה למיון HashMap לפי Keys

בדוגמה הבאה, אנו משתמשים בבנאי TreeMap כדי למיין את האלמנטים ולהעביר את האובייקט של מחלקה HashMap כארגומנט. זוהי הדרך הפשוטה ביותר למיין את HashMap לפי מפתחות.

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

תְפוּקָה:

 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 

מיין HashMap לפי ערכים באמצעות ממשק Comparator

ב-Java, מיון HashMap לפי ערכים הוא מסובך מכיוון שאין שיטה ישירה זמינה. כדי למיין את HashMap לפי ערכים, עלינו ליצור א משווה . הוא משווה שני אלמנטים על סמך הערכים.

לאחר מכן קבל את סט האלמנטים מהמפה והמיר את הסט לרשימה. להשתמש ב Collections.sort(List) שיטה למיין את רשימת האלמנטים לפי ערכים על ידי העברת משווה מותאם אישית. עכשיו צור חדש LinkedHashMap ולהעתיק את האלמנטים הממוינים לזה. מאז LinkedHashMap מבטיח את סדר ההכנסה של מיפויים. אנו מקבלים HashMap שהערכים שלו בסדר ממוינים.

נינה גופטה

יש הבדל קל בין מיון HashMap לפי מפתחות וערכים הוא שיכול להיות לו ערכים כפולים אך לא כפול מפתחות. אנחנו לא יכולים להשתמש ב-TreeMap כדי למיין ערכים מכיוון ש-TreeMap ממיין אלמנטים לפי מפתחות.

דוגמה למיון HashMap לפי ערכים

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

תְפוּקָה:

 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