黑马程序员技术交流社区

标题: TreeMap排序问题 [打印本页]

作者: 郑雪    时间: 2013-4-28 15:49
标题: TreeMap排序问题
本帖最后由 郑雪 于 2013-5-1 10:29 编辑

之前看到一个帖子问:假如有个TreeMap<key,value>,如今想按value给这个TreeMap排序可以实现 ?
我想定义一个比较器实现Comparator接口,完成按value排序,然后将其对象传递给TreeMap的构造函数,从而实现按value给TreeMap<key,value>进行排序,就是说通过put方法添加元素时就按value进行排序。不知比较器部分代码如何写?
作者: 刘胜寒    时间: 2013-4-28 16:01
可以现实按value排序,但是必须使用第三方容器,map支持按key排序,但不支持按value排序。
要想按value排序。
必须先把map-->list或者map-->set;
然后让list或者set实现Compareor接口。
比较器部分这个可以用 匿名内部类的方式
我给你搞个代码..
里面有写..
下载下来自己看
是上次那个活动写的
自己看去吧

Main.zip

1.13 KB, 下载次数: 19


作者: 谭威    时间: 2013-4-28 17:54
你看的那个贴子是我回复的。代码在那上面http://bbs.itheima.com/forum.php ... mp;page=1#pid306718
作者: 袁梦希    时间: 2013-4-28 19:15
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Comparator;
  4. import java.util.Iterator;
  5. import java.util.LinkedHashMap;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.TreeMap;


  9. public class T {

  10.         public static void main(String[] args) {
  11.                 TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();

  12.                 tm.put('a', 1);
  13.                 tm.put('c', 3);
  14.                 tm.put('y', 6);
  15.                 tm.put('f', 2);

  16.                 System.out.println(sort(tm));
  17.         }
  18.         
  19.         /** TreeMap的顺序是自然顺序(如整数从小到大),也可以指定比较函数。但不是插入的顺序
  20.          *  返回LinkedHashMap,以支持插入的顺序 */
  21.         private static LinkedHashMap<Character,Integer> sort(TreeMap<Character,Integer> map) {
  22.                 List<Map.Entry<Character,Integer>> list = new ArrayList<Map.Entry<Character,Integer>>();
  23.                 Iterator<Map.Entry<Character,Integer>> iter = map.entrySet().iterator();
  24.                 while(iter.hasNext()) {
  25.                         Map.Entry<Character,Integer> entry = iter.next();
  26.                         list.add(entry);
  27.                 }
  28.                 Collections.sort(list, new Comparator<Object>() {
  29.                         @SuppressWarnings("unchecked")
  30.                         @Override
  31.                         public int compare(Object o1, Object o2) {
  32.                                 Map.Entry<Character,Integer> entry1 = (Map.Entry<Character,Integer>)o1;
  33.                                 Map.Entry<Character,Integer> entry2 = (Map.Entry<Character,Integer>)o2;
  34.                                 return entry1.getValue() - entry2.getValue();
  35.                         }
  36.                 });
  37.                 LinkedHashMap<Character,Integer> sortedMap = new LinkedHashMap<Character,Integer>();
  38.                 for(Map.Entry<Character,Integer> entry : list) {
  39.                         sortedMap.put(entry.getKey(), entry.getValue());
  40.                 }
  41.                
  42.                 return sortedMap;
  43.         }
  44. }

复制代码
其实这个帖子最早我也发过,比楼上的还早。
http://bbs.itheima.com/thread-45375-1-1.html




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