【问题标题】:How do Java Priority Queues Work Under The Hood?Java 优先级队列如何在幕后工作?
【发布时间】:2020-10-22 05:28:25
【问题描述】:

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

但是在创建堆期间只需要 O(n) 时间。所以可以说我放了这条线

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

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

【问题讨论】:

    标签: java data-structures heap priority-queue


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢。您是否知道为什么开发优先级队列代码的人没有包含一个接收列表和自定义比较器的构造函数?我假设您无法使用自定义比较器构建堆?
    • 没有充分的理由。您可以使用自定义比较器构建堆。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多