黑马程序员技术交流社区

标题: map排序 [打印本页]

作者: 那日苏    时间: 2011-7-23 16:28
标题: map排序
TreeMap(Comparator<? super K> c) 是通过(KEY)值进行排序的,那
是否有办法通过map中(value)值进行排序?如何操作?
作者: 匿名    时间: 2011-7-23 16:36
看我发表的主题贴里,有个map排序的流程,和另外一个马有的另外一种方法。手机不能贴代码,非常郁闷
作者: 匿名    时间: 2011-7-24 00:00
其实吧,我没想出来直接用TreeMap按value排序的办法,但是呢,可以用entrySet的方法把所有键值对取出,放入list中,然后用Collections.sort(List list,Comparator comparator)的方法,将list和自定义排序功能的comparator比较器传递进去,就OK了.
我觉得我已经讲得非常赤裸裸了.呵呵,再详细的话就等于上代码了,还是算了吧,说到这里大家应该都会做了.
作者: 匿名    时间: 2011-7-24 00:49
标题: 回复 藤椅 的帖子
这题我是用数组做的,题已经交上去也面试了。就是像不出办法用value值去排序。
作者: 匿名    时间: 2011-7-24 09:18
楼主你可以去查看一下map接口的源代码,
map内部是按照hash算法存储的,不过我们有时候再项目中需要对map的value值进行排序
可查看下面这个方法试试[code=java]   @SuppressWarnings("unchecked")   
   public static Map.Entry[] getSortedHashtableByValue(Map h) {   
       Set set = h.entrySet();   
       Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set   
               .size()]);   
       Arrays.sort(entries, new Comparator() {   
           public int compare(Object arg0, Object arg1) {   
               Long key1 = Long.valueOf(((Map.Entry) arg0).getValue().toString());   
               Long key2 = Long.valueOf(((Map.Entry) arg1).getValue().toString());   
               return key1.compareTo(key2);   
           }   
       });   
  
       return entries;   
   }[/code]还有貌似TreeMap会自动排序map里面的value值
定义一个TreeMap重写他的[code=java]public V put(K key, V value) [/code]方法




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