我正在尝试使用优先级队列来保持整数的有序列表。在这样一个简单的例子中:
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
这不是我期待的考虑自然的讽刺。
我只想迭代而不通过排序删除或添加队列(用作排序列表)和排序。我还能以简单的方式做到这一点吗?
答案 0 :(得分:7)
PriorityQueue是一个优化的集合,用于快速查找尾部或头部值,使用称为堆的部分有序树结构(在维基百科上查找)。如果您弹出元素,它们将被订购。如果要迭代,请使用例如SortedSet,它也存储已排序的元素。
答案 1 :(得分:4)
这是PriorityQueue的一个非常棘手的问题:引用the Api
不保证方法iterator()中提供的迭代器 以任何特定顺序遍历优先级队列的元素。 如果您需要有序遍历,请考虑使用 Arrays.sort(pq.toArray())。
使用轮询代替获取将按顺序排列的头部