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

Building heap in O(N) in java instead of O(NlogN)

为了构建堆,我们在 java 中使用了 PriorityQueue class。有没有办法使用内置 library/class 直接从 O(N) 的数组构建堆,而不是单独推送每个元素以在 O(NlogN) 中构建堆?

使用the constructor that takes a collection:

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

一如既往,Java 文档没有提及任何关于复杂性的内容,但阅读 the source code 表明 OpenJDK 使用典型的 O(n) heapify 方法,而不是插入一个循环:

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