【问题标题】:Strange ordering in PriorityQueue in Java [duplicate]Java中PriorityQueue中的奇怪排序[重复]
【发布时间】:2012-06-11 05:28:13
【问题描述】:

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

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,这不是我所期望的。

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

【问题讨论】:

  • 为什么不使用 SortedList 或 SortedSet 来代替?

标签: java collections priority-queue


【解决方案1】:

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

【讨论】:

  • SortedSet 是我想要的。谢谢
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-09-04
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2017-02-19
    • 2012-10-25
    相关资源
    最近更新 更多