黑马程序员技术交流社区

标题: TreeMap<k,V>如何根据值来排序? [打印本页]

作者: 李节起    时间: 2012-4-11 22:44
标题: TreeMap<k,V>如何根据值来排序?
TreeMap<k,V>如何根据值来排序?
TreeMap<K,V>默认是用键key按自然顺序来排序的,
现有类TreeMap<Character,Interger>,这个类按键的字母顺序给元素排序,那怎样按其Interger类型的value值排序呢?
文档中TreeMap有构造方法能根据给定的比较器排序,如何实现?
作者: 黑马张平    时间: 2012-4-11 22:53
这个问题我想过,不过我也不知道怎么做,求大神帮忙!
作者: newlaw2013    时间: 2012-4-11 23:38
文档中TreeMap有构造方法能根据给定的比较器排序,public TreeMap(Comparator<? super K> comparator)
这个比较器还是对集合中的键进行排序的,要想按照value来排序,我的思路:
Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();//将TreeMap转成entrySet
然后定义一个List集合,集合中存储的对象是tm集合中键值对。用迭代的方法拿到键值对对象(Map.Entry类型),作为一个单独的键值对对象,可以通过getKey和getValue
方法获取键和值,再定义比较器就可以方便地按你想要的方式排序了。参考代码:
  1. class MyComparator implements Comparator<Map.Entry<Character,Integer>>
  2. {
  3.         public int compare(Map.Entry<Character,Integer> o1,Map.Entry<Character,Integer> o2)
  4.         {
  5.                
  6.                  if(o1.getValue()==o2.getValue())//当value相同时,用key进行比较排序。
  7.                 {
  8.                         return o1.getKey().compareTo(o2.getKey());
  9.                 }else{
  10.                         return o1.getValue() - o2.getValue();
  11.                 }
  12.         }
  13. }
复制代码





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