这个问题在这里已经有答案了:
java的priorityqueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么(5个答案)
priorityqueue.tostring元素顺序错误(4个答案)
如何迭代priorityqueue(9个答案)
打印优先级队列[java]的内容(3个答案)
上个月关门了。
public class Pair implements Comparable<Pair>{
public String name;
public int number;
public int compareTo(Pair other) {
if (other == null) {
return 1;
}
return Integer.compare(number, other.number);
}
}
ht = new Hashtable<String, Pair>(perLen);
PriorityQueue<Pair> pq = new PriorityQueue<Pair>(k);
set = ht.keySet();
for (String i: set) {
tmp0 = ht.get(i);
if (tmp0.compareTo(pq.peek()) > 0) {
if (pq.size() == k) {
pq.remove();
}
pq.add(tmp0);
}
}
System.out.println(pq.toString());
输出:
[OSCAR 822, ALBERTO 827, DAVID 1523, JAVIER 943]
我在哈希表中寻找k个最大的对(它们的数目),而输出中的对实际上是正确的。我的问题是,为什么最后两个是交换的?
3条答案
按热度按时间qq24tv8q1#
您可以使用poll方法检查订单,如下所示:
打印优先级队列的内容
luaexgnf2#
priorityqueue类的tostring()方法不能保证元素的顺序,因为它使用迭代器。
55ooxyrt3#
PriorityQueue
只返回头中最低的元素。它不会对所有元素进行排序,因此如果使用pq.toString()
,元素可能不按顺序出现。这是因为,在内部,PriorityQueue.toString()
使用PriorityQueue.iterator()
方法和,根据文件:方法中提供的迭代器
iterator()
不能保证以任何特定顺序遍历优先级队列的元素。如果需要有序遍历,请考虑使用Arrays.sort(pq.toArray())
.如果要按顺序打印优先级队列的元素,应更改以下代码:
以下内容: