java - 尽管java中的PQ默认是一个min-heap,为什么有些人会重写使用PriorityQueue实现minheap的比较器函数?

标签 java comparator priority-queue min-heap

我搜索了一下,看起来 PriorityQueue 在 Java 中默认就像一个最小堆一样工作。那么,为什么要重写比较器呢?我见过人们甚至对整数也这样做。我在这里错过了什么吗?我是java新手。

我尝试在需要 min-heap 实现的 leetcode 解决方案中使用以下两个代码,并且都被接受。这是一个片段:

// Implementing comparator
PriorityQueue<Integer> minHeap = new PriorityQueue<>(10,new Comparator<Integer>() {
    public int compare(Integer a, Integer b) {
        return a - b;
    }
});

// Not implementing comparator - why can't we just do this?
PriorityQueue<Integer> minHeap = new PriorityQueue<>();

最佳答案

在这种情况下,Comparator 确实显得多余。如果您没有显式地将 Comparator 传递给 PriorityQueue 的构造函数,它将使用自然排序,这正是此 Comparator 所实现的。

关于java - 尽管java中的PQ默认是一个min-heap,为什么有些人会重写使用PriorityQueue实现minheap的比较器函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54547881/

相关文章:

Java:TreeSet 和 LinkedList 的问题

Java 8 使用特定范围排序

mysql - MySQL 中的极低优先级 SELECT 查询

python - 过滤器存储队列

multithreading - 具有更改优先级功能的优先级队列,它使元素保持有序

java - 是否可以让 ObjectProvider 提供来自其他包的对象?

java - SELECT 查询的性能 - Oracle/JDBC

java - 在命令提示符下编译并运行java程序

c++ - 查找列表的最左边和最右边的点。 std::find_if 是正确的方法吗?

java - Java 中的递归下降解析器