// java中默认创建小顶堆
private PriorityQueue<Integer> right = new PriorityQueue<>();
// 创建大顶堆
private PriorityQueue<Integer> left = new PriorityQueue<>((o1, o2) -> o2 - o1);
其中((o1, o2) -> o2 - o1)和((o1, o2) -> o1 - o2)的区别在于:
1.((o1, o2) -> o2 - o1) 是如果o2 - o1小于0,返回参数-1;如果大于0,则把o1加入堆中。
2.((o1, o2) -> o1 - o2) 是如果o1 - o2小于0,返回参数-1;如果大于0,则把o2加入堆中。
原理:
通过自定义的Comparator函数来将小顶堆改为大顶堆
PriorityQueue<Integer> bigHeap=new PriorityQueue<Integer>(DEFAULT_INITIAL_CAPACITY, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});