Java 优先级队列是如何工作的?

How do Java Priority Queues Work Under The Hood?

我似乎找不到任何信息来回答我的问题。所以 Java PriorityQueue 是使用堆构建的。堆的插入和删除时间为 O(logn),因此如果我要进行堆排序,则为 O(nlogn)。

但是在堆的创建过程中只需要O(n)的时间。所以假设我把线

PriorityQueue<Character> heap = new PriorityQueue<>(list); 

Java 是用值构建数据结构所以它的 O(n) 还是之后插入所以它的 O(nlogn)?

您可以随时查看来源:http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/PriorityQueue.java

当您从未排序的列表初始化它时,它使用 O(n) heapify 方法。