为什么 toString of PriorityQueue returns 元素乱序?
Why does toString of PriorityQueue returns elements out of order?
我有这个使用 PriorityQueue 的简单代码,我希望整数按降序存储。
PriorityQueue<Integer> jumps = new PriorityQueue<>(20,Collections.reverseOrder());
jumps.add(8);
jumps.add(5);
jumps.add(15);
jumps.add(2);
jumps.add(16);
System.out.println(jumps.toString());
这会打印
[16, 15, 8, 2, 5]
虽然我预料到了
[16, 15, 8, 5, 2]
我做错了什么?
由 PriorityQueue
的 Iterator
编辑的顺序 return 是 not guaranteed(强调他们的):
The Iterator provided in method iterator()
[...] [is] not guaranteed to traverse the elements of the priority queue in any particular order. If you need ordered traversal, consider using Arrays.sort(pq.toArray())
.
这是what toString()
uses,因此toString()
输出中元素的顺序也未指定
保证的是,多次调用 poll()
将 return 值以适当的顺序排列:
while (!jumps.isEmpty()) {
System.out.println(jumps.poll());
}
我有这个使用 PriorityQueue 的简单代码,我希望整数按降序存储。
PriorityQueue<Integer> jumps = new PriorityQueue<>(20,Collections.reverseOrder());
jumps.add(8);
jumps.add(5);
jumps.add(15);
jumps.add(2);
jumps.add(16);
System.out.println(jumps.toString());
这会打印
[16, 15, 8, 2, 5]
虽然我预料到了
[16, 15, 8, 5, 2]
我做错了什么?
由 PriorityQueue
的 Iterator
编辑的顺序 return 是 not guaranteed(强调他们的):
The Iterator provided in method
iterator()
[...] [is] not guaranteed to traverse the elements of the priority queue in any particular order. If you need ordered traversal, consider usingArrays.sort(pq.toArray())
.
这是what toString()
uses,因此toString()
输出中元素的顺序也未指定
保证的是,多次调用 poll()
将 return 值以适当的顺序排列:
while (!jumps.isEmpty()) {
System.out.println(jumps.poll());
}