2

我正在尝试使用优先级队列来保持整数的有序列表。在一个简单的例子中:

PriorityQueue<Integer> queue = new PriorityQueue<>();
queue.offer(3000);
queue.offer(1999);
queue.offer(999);
for(Integer i : queue)
    System.out.println(i);

这打印

999
3000
1999

这不是我所期望的考虑自然 oding。

我只是想在不删除或添加队列(用作排序列表)的情况下进行迭代。我还能以简单的方式做到这一点吗?

4

2 回答 2

8

PriorityQueue 是一个为快速查找尾部或头部值而优化的集合,使用称为堆的部分有序树结构(在维基百科上查找)。如果你弹出元素,它们将被排序。如果要迭代,请改用 SortedSet,它还存储已排序的元素。

于 2012-06-10T21:26:08.340 回答
4

这是 PriorityQueue 的一个非常隐蔽的问题:引用Api

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

改为使用 Poll 来获取有序的头部

于 2012-06-10T21:28:13.930 回答