我搜索了一下,看起来 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/