为什么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]
我在这里做错了什么?
回答
在返回的顺序Iterator的PriorityQueue是不能保证(重点他们的):
方法
iterator()[...] [is] 中提供的 Iterator不保证以任何特定顺序遍历优先级队列的元素。如果您需要有序遍历,请考虑使用Arrays.sort(pq.toArray()).
这是什么toString()用途,因此在该元素的顺序toString()也没有指定输出
什么是保证的是,多次调用poll()将在适当的顺序返回值:
while (!jumps.isEmpty()) {
System.out.println(jumps.poll());
}