为什么 PriorityQueue 的 toString 会乱序返回元素?

raj*_*air 0 java priority-queue

我有一个使用 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());
Run Code Online (Sandbox Code Playgroud)

这打印

[16, 15, 8, 2, 5]
Run Code Online (Sandbox Code Playgroud)

虽然我会期待

[16, 15, 8, 5, 2]
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

Joa*_*uer 5

在返回的顺序Iterator的PriorityQueue是不能保证(重点他们的):

方法iterator()[...] [is] 中提供的 Iterator不保证以任何特定顺序遍历优先级队列的元素。如果您需要有序遍历,请考虑使用Arrays.sort(pq.toArray()).

这是什么toString()用途,因此在该元素的顺序toString()也没有指定输出

什么是保证的是,多次调用poll()将在适当的顺序返回值:

while (!jumps.isEmpty()) {
  System.out.println(jumps.poll());
}
Run Code Online (Sandbox Code Playgroud)