java - Java中的priorityQueue顺序?

标签 java collections queue priority-queue

<分区>

我无法理解 Java 中 PriorityQueue 的顺序。据我了解,它们是基于堆的,它们无法提供准确的迭代顺序作为插入顺序。我想知道 priorityQueue 然后根据什么对自己进行排序。 给定代码:

PriorityQueue<String> pq = new PriorityQueue<String>();
        pq.offer("hepqo");
        pq.offer("bro");
        pq.offer("wassup");
        pq.offer("okay");
        pq.offer("bingo");
        pq.offer("first");
        pq.offer("last");
        pq.offer("ssup");
        System.out.println("polled "+pq.poll());
        System.out.println(pq);
        String str[] = pq.toArray(new String[0]);
        Arrays.sort(str);
        for(String str1:str){
            System.out.println(str1);
        }

产生输出:

polledbingo
[bro, hepqo, first, okay, ssup, wassup, last]
bro
first
hepqo
last
okay
ssup
wassup

即使我将它转换为数组,顺序也会丢失。
我什至觉得这不是字符串的自然排序。
有什么办法可以保持优先队列的插入顺序?
他们是根据什么进行排序的?

最佳答案

队列根据字符串的字典顺序排序,这是它们的自然顺序(即“b”在“f”之前,“f”在“h”之前,等等)。如果您希望队列保持插入顺序,请使用普通 Queue 而不是 PriorityQueue

关于java - Java中的priorityQueue顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17688180/

相关文章:

java - Eclipse 消息说 List 无法解析为类型

java - 具有共享数据的两个 Web 应用程序

java - 删除大于 1000 的 ID 时出现问题

java - 在执行频率的以下代码中出错

Java - ArrayList 构造函数的线程安全

.net - 类似于 IDictionary<TKey, TValue>,但仅适用于 .NET 中的键(不需要值)?

带有 Amazon SQS 的 Laravel 队列

java - 使用 Java 中的算法更改绘图的角度/位置

database - 在 CouchDB 中构建队列

java - 自定义阻塞队列锁定问题