0

重複の可能性:
TreeMap 値による並べ替え

こんにちは、キーではなく値で TreeMap コレクションを並べ替えたいと思います。たとえば、

 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
4

1 に答える 1

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 を返さないため、値の重複を許可することに注意してください。

于 2012-12-19T05:02:58.790 に答える