黑马程序员技术交流社区

标题: 关于一个TreeMap集合的问题? [打印本页]

作者: 潘廖明    时间: 2013-4-28 01:27
标题: 关于一个TreeMap集合的问题?
本帖最后由 潘廖明 于 2013-4-28 14:26 编辑

假如有个TreeMap<key,value>,如今想按value给这个TreeMap排序可以实现 ?如果可以给个Demo?
作者: 谭威    时间: 2013-4-28 12:16
这个排序是可以,但是不能直接排序,需要转化成list排序,但是最终map还是默认的key排序。用Collections.sort(list,Compartor);这个方法可以排序。但排完序后只是l转化后的list排序了:
  1. Map<Integer,String> map=new TreeMap<Integer,String>();
  2.                         map.put(1, "bb");
  3.                         map.put(4, "ffww");
  4.                         map.put(2, "aa");
  5.                         map.put(6, "dds");
  6.                         map.put(5, "vv");
  7.                         map.put(3, "ee");
  8.                         //排序前
  9.                         System.out.println(map);//默认按照键排序的{1=bb, 2=aa, 3=ee, 4=ffww, 5=vv, 6=dds}
  10.                         //用工具类中的sort方法进行排序,指定比较器,需要将map转化成list集合
  11.                         //集合中存储的是每对元素
  12.                         List<Map.Entry<Integer,String>> list=new ArrayList<Map.Entry<Integer,String>>(map.entrySet());
  13.                         Collections.sort(list, new Comparator<Map.Entry<Integer,String>>() {
  14.                                 @Override
  15.                                 public int compare(Entry<Integer, String> o1, Entry<Integer, String> o2) {
  16.                                         int temp=o1.getValue().compareTo(o2.getValue());
  17.                                         //按照map中的value比较
  18.                                         return temp==0?o1.getKey()-o2.getKey():temp;
  19.                                 }
  20.                         });
  21.                         System.out.println(list);//list排序后[2=aa, 1=bb, 6=dds, 3=ee, 4=ffww, 5=vv]

复制代码
但是map还是System.out.println(map);//map排序后{1=bb, 2=aa, 3=ee, 4=ffww, 5=vv, 6=dds}
作者: 潘廖明    时间: 2013-4-28 14:24
谭威 发表于 2013-4-28 12:16
这个排序是可以,但是不能直接排序,需要转化成list排序,但是最终map还是默认的key排序。用Collections.so ...

基本了解了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2