如何按值而不是按键对TreeMap进行排序

时间:2012-12-19 01:39:37

标签: java treemap

  

可能重复:
  TreeMap sort by value

您好我想按值而不是按键对TreeMap Collection进行排序。例如,

 TreeMap map=new TreeMap();
    map.put(new Integer(100),"ccc");
    map.put(new Integer(300),"bbb");
    map.put(new Integer(200),"ddd");
    map.put(new Integer(400),"aaa");

应该按照,

订购
1) 400 -> aaa
2) 300 -> bbb
3) 100 -> ccc
4) 200 -> ddd

1 个答案:

答案 0 :(得分:1)

你需要一个特殊的迭代器,试试这个

...
    Iterator i = valueIterator(map);
    while(i.hasNext()) {
        System.out.println(i.next());
    }
...
    Iterator valueIterator(TreeMap map) {
        Set set = new TreeSet(new Comparator<Map.Entry<Integer, String>>() {
            @Override
            public int compare(Entry<Integer, String> o1, Entry<Integer, String> o2) {
                return  o1.getValue().compareTo(o2.getValue()) > 0 ? 1 : -1;
            }
        });
        set.addAll(map.entrySet());
        return set.iterator();
    }

输出

400=aaa
300=bbb
100=ccc
200=ddd

您可以扩展TreeMap并将此方法添加到其中。请注意,Comparator允许重复值,因为它永远不会返回0.