java - Java 中 PriorityQueue 的奇怪排序

标签 java collections priority-queue

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

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

考虑到自然排序,这不是我所期望的。

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

最佳答案

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

关于java - Java 中 PriorityQueue 的奇怪排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10972459/

相关文章:

c++ - 为什么 Vector 被用作 Priority Queue 的第二个参数?

c++ - 使用 `std::greater` 通过 `priority_queue` 创建最小堆的原因

java - 动态添加 JPanel 时大小计算错误

java - Jetty:嵌入还是不嵌入?

java - jasper 在 netbeans 中工作正常,但抛出异常

java - 2 compareTo 方法在同一个类定义中被覆盖,我怎么能强制使用第二个?

c# - 什么是集合语义(在.NET中)?

java - 数组唯一元素和移动应用程序数据结构

C++)二进制表达式的无效操作数错误与优先队列

java spring无尽的并发工作