كيفية فرز HashMap حسب القيم

كما رأينا في المقالةكيفية فرز ArrayList< ت> . في هذا البرنامج التعليمي سوف نتعلم كيفية sort HashMap في جافا بترتيب تصاعدي وتنازلي< / b>. هذا هو نفسه تقريبا كما هو الحال في ArrayList.  سنقوم بإنشاء فئة باسم "المقارنة" التي تنفذ الواجهة. < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >المقارنة< / الامتداد>  لإجراء المقارنة في المثالين في هذا البرنامج التعليمي.

1) الفرز باستخدام المقارنة ووضع النتيجة في TreeMap

لماذا تمرير مثيل فئة المقارنة كمعلمة في منشئ TreeMap؟  ببساطة لأن TreeMap< ك ، ف> ينفذ واجهة الخريطة كملف HashMap ويحتوي على منشئ TreeMap (شركات المقارنة). الفرق الوحيد هو أن TreeMap يتم فرزها حسب keys.

import java.util.Compartor; 
import java.util.HashMap;
import java.util.map;
import java.util.TreeMap;

فئة عامة ثلاثية {

فراغ ثابت عام رئيسي (سلسلة [] args) {

HashMap map = جديد HashMap();
comp المقارنة = مقارنة جديدة (خريطة) ؛
TreeMap map_apres = TreeMap (شركات);

map.put("A",49);
map.put ("B" ، 18) ؛
map.put("C",92);
map.put ("D" ، 37) ؛
map.put("E",62);

System.out.println("قبل الفرز: "+map);
map_apres.putAll (خريطة) ؛
System.out.println("بعد الفرز: "+map_apres);
}
}

class يقوم المقارن بتنفيذ المقارنة {

Map tuple;
مقارنة عامة (HashMap map) {
this.tuple = map ؛
}

//يرتب هذا المقارن العناصر بترتيب تنازلي
@Override
int العام مقارنة (الكائن o1، الكائن o2) {
// TODO كعب طريقة تم إنشاؤه تلقائيا
إذا كان (int) tuple.get(o1) >= (int) tuple.get(o2)) {
return -1;
} آخر {
return 1;
}
}
}
< / string >< / string >< / string >< / string >< / string >< / string >< / string >< / pre>

2) فرز HashMap باستخدام Collections.sort

في هذا المثال، سنقوم بفرز العناصر من النوع مزدوج. يتم نسخ العناصر إلى LinkedList الذي يقوم بتنفيذ واجهة القائمة ، ثم يتم فرزها باستخدام Collections.sort التي استخدمناها في المقالات السابقة لفرز مجموعات الكائنات الأخرى. بعد الفرز ، نقوم بنسخ العناصر التي تم فرزها من LinkedList إلى جدول تجزئة جديد سيتم إرجاعه كإخراج.

public static void main(String[] args) {

HashMap map = جديد HashMap();

map.put("A",18.5);
map.put("E",76.8);
map.put("C",24.1);
map.put("F",86.2);
map.put("D",5.7);
map.put("B",84.6);

System.out.println("قبل الفرز: "+map);
System.out.println ("بعد الفرز: "+ sortWithValue (خريطة)) ؛
}

HashMap ثابت عام< سلسلة ، مزدوجة> sortWithValue (HashMap< سلسلة ، مزدوجة> خريطة ){
قائمة< خريطة.دخول< سلسلة ، مزدوجة> > قائمة =
LinkedList جديدة< خريطة.دخول< سلسلة ، مزدوجة> > ( map.entrySet () );
Collections.sort (قائمة ، مقارنة جديدة< خريطة.دخول< سلسلة ، مزدوجة> > (){
public int compare( Map.Entry< سلسلة ، مزدوجة> o1 ، خريطة.إدخال< سلسلة ، مزدوجة> o2 ){
return (o1.getValue()).compareTo( o2.getValue());
}
})؛

HashMap< سلسلة ، مزدوجة> map_apres = خريطة لينكد هاش ماب جديدة< سلسلة ، مزدوجة> ();
ل(Map.Entry< سلسلة ، مزدوجة> إدخال: قائمة) < br / > map_apres.put ( entry.getKey () ، entry.getValue () ؛
map_apres العودة ؛
}
< / string >< / string >< / pre>run:

< pre class = "prettyprint lang-java" > قبل الفرز: {D = 5.7 ، E = 76.8 ، F = 86.2 ، A = 18.5 ، B = 84.6 ، C = 24.1}
بعد الفرز: {D = 5.7 ، A = 18.5 ، C = 24.1 ، E = 76.8 ، B=84.6, F=86.2}
للفرز في اتجاه تنازلي ، ما عليك سوى تغيير ترتيب المقارنة في المقارنة: الدالة

return(o2.getValue()).compareTo( o1.getValue()); 
< / string >< / pre> المراجع:
وثائق أوراكل - HashMap
TutorialsPoint - فئة HashMap
Documentation Comparator
وثائق LinkedHashMap < / a>