今天利用PriorityQueue實現最大堆,寫了一個bug。
原始寫法:
Queue<Integer> heap = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
用lambda簡化后:
Queue<Integer> heap = new PriorityQueue<>((o1, o2) -> o2 - o1);
注意到,這里o2-o1是會產生溢出的,會導致結果不正確。
所以采用這種寫法更好:
Queue<Integer> heap = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
});
用lambda簡化后:
Queue<Integer> heap = new PriorityQueue<>((o1, o2) -> o2.compareTo(o1));
即
Queue<Integer> heap = new PriorityQueue<>(Comparator.reverseOrder());
