1

私は a を持っており、整数の昇順でHashMap<Character, Integer>値を a に配置したいと思います。PriorityQueueこれを行う方法を考えるのに問題があります。私はNode値を保持できるクラスを持っているので、PriorityQueue<Node>.

4

2 に答える 2

1

Mapこの場合は使用しません。

とを保持する独自のPair/Nodeクラスを作成し、このクラスにを実装させます。CharacterIntegerComparable

Comparable あなたはここで読むことができます。

ノードクラスではcompareTo、次のようなメソッドを実装する必要があります。

public int compareTo(Node o) {
    return this.idd - o.idd ;
}

ここで、idは整数を保持する変数です。

このように、あなたはそれらをあなたの質問で言及したSortedSetようなものTreeSetに入れることができますPriorityQueue

于 2012-12-05T05:50:56.707 に答える
0

コード例:

HashMap<Character, Integer> h = new HashMap<Character, Integer>();
h.put('z',30);
h.put('e',10);
h.put('b',20);
h.put('c',20);
List<Map.Entry> a = new ArrayList<Map.Entry>(h.entrySet());
Collections.sort(a,
                 new Comparator() {
                     public int compare(Object o1, Object o2) {
                         Map.Entry e1 = (Map.Entry) o1;
                         Map.Entry e2 = (Map.Entry) o2;
                         return ((Comparable) e1.getValue()).compareTo(e2.getValue());
                     }
                 });

for (Map.Entry e : a) {
        System.out.println(e.getKey() + " " + e.getValue());
}

出力 (OP の必要に応じて整数値で並べ替え):

e 10
b 20
c 20
z 30
于 2012-12-05T06:50:26.070 に答える