在Java中以O(N)而不是O(NlogN)构建堆

时间:2019-05-20 19:55:06

标签: java heap

要构建堆,我们在Java中使用PriorityQueue类。有没有一种方法可以使用内置库/类直接从O(N)中的数组构建堆,而不是单独推送每个元素以在O(NlogN)中构建堆?

1 个答案:

答案 0 :(得分:3)

使用the constructor that takes a collection

new PriorityQueue<String>(Arrays.asList(yourArray));

Java Docs确实没有提及任何复杂性,但是阅读the source code表示OpenJDK使用典型的O(n)堆化方法,而不是插入循环:

private void initFromCollection(Collection<? extends E> c) {
    initElementsFromCollection(c);
    heapify();
}