1

我有一个HashMap<Character, Integer>,我想将这些值PriorityQueue按整数的升序排列。我在想办法做到这一点时遇到了麻烦。我有一个Node可以保存值的类,所以:PriorityQueue<Node>.

4

2 回答 2

1

在这种情况下我不会使用 a Map....

编写你自己的Pair/Node类来保存你的CharacterandInteger并使这个类实现Comparable

你可以在Comparable 这里阅读。

在您的节点类中,您将必须实现该compareTo方法,如下所示:

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

其中 id 是保存整数的变量。

像这样,您可以将它们放在您在问题中提到的SortedSet类似TreeSetPriorityQueue

于 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 回答