A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 潘廖明 中级黑马   /  2013-4-28 01:27  /  1480 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 潘廖明 于 2013-4-28 14:26 编辑

假如有个TreeMap<key,value>,如今想按value给这个TreeMap排序可以实现 ?如果可以给个Demo?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

2 个回复

倒序浏览
这个排序是可以,但是不能直接排序,需要转化成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 12:16
这个排序是可以,但是不能直接排序,需要转化成list排序,但是最终map还是默认的key排序。用Collections.so ...

基本了解了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马