//HashMap 按照value 升序排列
@Test
public void HashMapValuesDown(){
Map<String , Integer> hashmap = new HashMap<>();
hashmap.put("acb1", 5);
hashmap.put("bac1", 3);
hashmap.put("bca1", 20);
hashmap.put("cab1", 80);
hashmap.put("cba1", 80);
hashmap.put("abc1", 10);
hashmap.put("abc2", 12);
hashmap.put("avcb2", 2);
hashmap.put("avcb1", 2);
//升序比較器
Comparator<Map.Entry<String, Integer>> valueUp = new Comparator<Map.Entry<String, Integer>>(){
public int compare(Entry<String, Integer> o1, Entry<String, Integer o2>){
return o1.getValue() - o2.getValue();
}
};
List<Map.Entry<String, Integer>> list = Collections.synchronizedList(new ArrayList<Map.Entry<String, Integer>(hashmap.entrySet()));
Collections.sort(list , valueUp);
for(Map.Entry<String , Integer> entry : list){
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
//*****************************************************************
//HashMap 按照value 降序排序@Test
public void HashMapValuesDown(){
Map<String , Integer> hashmap = new HashMap<>();
hashmap.put("acb1", 5);
hashmap.put("bac1", 3);
hashmap.put("bca1", 20);
hashmap.put("cab1", 80);
hashmap.put("cba1", 80);
hashmap.put("abc1", 10);
hashmap.put("abc2", 12);
hashmap.put("avcb2", 2);
hashmap.put("avcb1", 2);
//默認HashMap 按key的升序 排序的; 現在要求按value 降序排序? 怎麼辦?
// 實現 Comparator 接口 , 並 把map 轉 list , 調用Collections.sort() 方法 對List 排序, 最後遍歷輸出
//1、降序比較器
Comparator<Map.Entry<String, Integer>> valueDownComparator = new Comparator<Map.Entry<String, Integer>>(){
@override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2){
return o2.getValue() - o1.getValue();
}
};
//2、map 轉list
List<Map.Entry<String, Integer>> list = new ArrayList<>(ha'shmap.entrySet());
//3、Collections 調用 sort()方法 按 valueDownComparator 規則排序
Collections.sort(list , valueDownComparator);
//4、遍歷 list
System.out.println("HashMap sorted by desc");
for(Map.Entry<String, Integer> entry : list){
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}