为什么 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]

我做错了什么?

PriorityQueueIterator 编辑的顺序 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());
}