(转)Map按Key或者Value排序
?
原文地址:
http://kunling123.blog.163.com/blog/static/89909082010256312806/
做项目的时候经常遇到要将Map排序,TreeMap和SortedMap本身支持排序功能,而HashMap本身是不支持排序的,因此有必要自定义排序。
??? 废话少说,要实现自定义排序,首先要实现Comparator接口。
Java代码
?
- import?java.util.Comparator; ??
- ??
- public?class?KeyComparator?implements?Comparator<Object>?{ ??
- ??
- ????public?int?compare(Object?arg0,?Object?arg1)?{ ??
- ????????int?muti0?=?(Integer)?arg0; ??
- ????????int?muti1?=?(Integer)?arg1; ??
- ????????if?(muti0?<?muti1)?{ ??
- ????????????return?1; ??
- ????????}?else?{ ??
- ????????????return?0; ??
- ????????} ??
- ????} ??
- ??
- }??
?
然后写一个测试类,实现HashMap按value排序。
Java代码
?
- public?class?Test{ ??
- ??public?static?void?main(String[]?args){ ??
- ?????KeyComparator?com?=?new?KeyComparator(); ??
- ?????Map<String,Integer>?map?=?new?HashMap<String,Integer>(); ??
- ?????map.put("a",3); ??
- ?????map.put("b",1);?? ??
- ?????map.put("c",2); ??
- ?????List<Integer>?list?=?new?ArrayList<Integer>(map.values()); ??
- ?????Collections.sort(list,com); ??
- ?????for(Map.Entry<String,Integer>?entry:map.entrySet){ ??
- ??????????System.out.println(entry.getValue()); ??
- ??????} ??
- ??} ??
- }??
?
输出结果为:3,2,1
如果要实现HashMap按key进行排序,只需要修改如下代码:
int muti0 = (Integer) arg0;
int muti1 = (Integer) arg1;
修改为:
String muti0 = (String) arg0;
String muti1 = (String) arg1;
List<Integer> list = new ArrayList<Integer>(map.values());
修改为:
List<String> list = new ArrayList<String>(map.keySet());
System.out.println(entry.getValue());
修改为:
System.out.println(entry.getKey());
输出结果为:c,b,a