我有一个HashMap<Character, Integer>
,我想将这些值PriorityQueue
按整数的升序排列。我在想办法做到这一点时遇到了麻烦。我有一个Node
可以保存值的类,所以:PriorityQueue<Node>
.
问问题
632 次
2 回答
1
在这种情况下我不会使用 a Map
....
编写你自己的Pair
/Node
类来保存你的Character
andInteger
并使这个类实现Comparable
。
你可以在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 回答