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

我有一个使用 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]

我在这里做错了什么?

回答

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

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

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

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

while (!jumps.isEmpty()) {
  System.out.println(jumps.poll());
}


以上是为什么PriorityQueue的toString会乱序返回元素?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>