读书人

(转)Map按Key可能Value排序

发布时间: 2012-12-22 12:05:07 作者: rapoo

(转)Map按Key或者Value排序

?

原文地址:

http://kunling123.blog.163.com/blog/static/89909082010256312806/

做项目的时候经常遇到要将Map排序,TreeMap和SortedMap本身支持排序功能,而HashMap本身是不支持排序的,因此有必要自定义排序。

??? 废话少说,要实现自定义排序,首先要实现Comparator接口。

Java代码

?

  1. import?java.util.Comparator; ??
  2. ??
  3. public?class?KeyComparator?implements?Comparator<Object>?{ ??
  4. ??
  5. ????public?int?compare(Object?arg0,?Object?arg1)?{ ??
  6. ????????int?muti0?=?(Integer)?arg0; ??
  7. ????????int?muti1?=?(Integer)?arg1; ??
  8. ????????if?(muti0?<?muti1)?{ ??
  9. ????????????return?1; ??
  10. ????????}?else?{ ??
  11. ????????????return?0; ??
  12. ????????} ??
  13. ????} ??
  14. ??
  15. }??

?

然后写一个测试类,实现HashMap按value排序。

Java代码

?

  1. public?class?Test{ ??
  2. ??public?static?void?main(String[]?args){ ??
  3. ?????KeyComparator?com?=?new?KeyComparator(); ??
  4. ?????Map<String,Integer>?map?=?new?HashMap<String,Integer>(); ??
  5. ?????map.put("a",3); ??
  6. ?????map.put("b",1);?? ??
  7. ?????map.put("c",2); ??
  8. ?????List<Integer>?list?=?new?ArrayList<Integer>(map.values()); ??
  9. ?????Collections.sort(list,com); ??
  10. ?????for(Map.Entry<String,Integer>?entry:map.entrySet){ ??
  11. ??????????System.out.println(entry.getValue()); ??
  12. ??????} ??
  13. ??} ??
  14. }??

?

输出结果为: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

读书人网 >编程

热点推荐