黑马程序员技术交流社区

标题: TreeMap怎么实现对value排序? [打印本页]

作者: 罗杰    时间: 2012-4-19 17:49
标题: TreeMap怎么实现对value排序?
TreeMap<key,value>
听课的时候没有注意,用到才发现TreeMap使用Comparator只能对key进行排序,有没有对value排序的方发呢?
也上网搜了,没有什么好答案
作者: τ、高童鞋ゝ    时间: 2012-4-19 17:53
可以借助ArrayList,用Collections.sort()方法来对ArrayList排序,从而实现效果

// 将TreeMap中的元素放到ArrayList中
ArrayList<Map.Entry<Integer, Double>> tmList = newArrayList<Map.Entry<Integer, Double>>(tm.entrySet());  
// 利用Collections.sort方法排序
Collections.sort(tmList, newComparator<Map.Entry<Integer, Double>>() {     @Override  publicintcompare(Map.Entry<Integer, Double> o1,    Map.Entry<Integer, Double> o2) {     returno2.getValue().compareTo(o1.getValue());   } });   
// 输出排序后的数据
for(Map.Entry<Integer, Double> entry : tmList) {   System.out.println(String.format("Key : %d, Value : %f", entry.getKey(), entry.getValue())); }

作者: liuyang    时间: 2012-4-19 22:32
TreeMap如不指定排序器,默认将按照key值进行升序排序,如果指定了排序器,则按照指定的排序器进行排序。

具体的排序规则,可以在int compare()方法中进行指定。
作者: 黑马-刘昌文    时间: 2012-4-19 22:50
TreeMap map = new TreeMap;
ArrayList<Map.Entry<Character, Integer>> infoIds = new ArrayList<Map.Entry<Character, Integer>>(map.entrySet());
Collections.sort(infoIds, new Comparator<Map.Entry<Character, Integer>>() {
                                        public int compare(Map.Entry<Character, Integer> o1,
                                                        Map.Entry<Character, Integer> o2) {
                                                return (o1.getValue() - o2.getValue());
                                        }
                                });
把TreeMap转换成ArrayList,再对ArrayList排序!
作者: 黑马—王宁    时间: 2012-4-19 23:04
首先TreeMap是按key排序的
如果要按value排序,就不能用TreeMap
假设TreeMap是按Value排序的,一点用处都没有,没有key值你怎么获得value?
要么换种别的容器,ArrayList,再用Collections.sort()就OK了
作者: 黑马罗坚    时间: 2012-4-19 23:08
关于排序 很多对象都会提供sort()方法  你可以试下 对象名.sort();看下该对象有没有实现排序功能  数组排序是用的Arrays类  没有实现 就可以自己实现下
作者: τ、高童鞋ゝ    时间: 2012-4-19 23:28
THANK YOU !  斑竹!




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