- <font size="3">/*
- 可以对map中的值进行排序哈,请看下面我写的例子
- */
- import java.util.*;
- class Demo1
- {
- public static void main(String[] args)
- {
- Map<String,Integer> mp= new HashMap<String,Integer>();
- mp.put("A", 65);
- mp.put("B", 43);
- mp.put("C", 26);
- mp.put("D", 20);
- mp.put("E", 110);
- mapSort(mp); //排序前list:[D=23, E=85, A=98, B=50, C=76]
- }
- //按照值排序的方法
- public static void mapSort(Map<String,Integer> mp)
- {
- //简单的思想就是拿到键值对(Set集合)再存入list集合中去:
- List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(mp.entrySet());
- System.out.println("排序前\t"+list);
-
- Collections.sort(list,new MyCompl()); //自定义比较器排序
- System.out.println("排序后\t"+list);
- }
- }
- //按照值来进行排序的自定义比较器
- class MyCompl implements Comparator<Map.Entry<String,Integer>>
- {
- public int compare(Map.Entry<String, Integer> me1,Map.Entry<String, Integer> me2)
- {
- int num=me1.getValue().compareTo(me2.getValue());
- if (num==0) //如果值一样,就按照键来排序
- return me1.getKey().compareTo(me2.getKey());
- return num;
- }
- }
- /*结果
- 排序前 [D=20, E=110, A=65, B=43, C=26]
- 排序后 [D=20, C=26, B=43, A=65, E=110]
- */</font>
复制代码
|