大顶堆、小顶堆的使用
Java 使用 PriorityQueue<>((x, y) -> (y - x)) 可方便实现大顶堆。
默认new的PriorityQueue为小顶堆结构
大顶堆(和小顶堆)数据结构中只可保证堆顶元素为最大值(最小值)
@Test//这里用来测试小顶堆与大顶堆
public void test() {
Queue<Integer> queue = new PriorityQueue<>();
queue.offer(4);
queue.offer(5);
queue.offer(1);
queue.offer(6);
queue.offer(2);
queue.offer(7);
queue.offer(3);
queue.offer(8);
System.out.println(queue);//每次排在首位的是最小的[1, 2, 3, 6, 5, 7, 4, 8]
queue.poll();
System.out.println(queue);//[2, 5, 3, 6, 8, 7, 4]
queue.poll();
System.out.println(queue);//[3, 5, 4, 6, 8, 7]
queue.poll();
System.out.println(queue);//[4, 5, 7, 6, 8]
// Queue<Integer> queue1 = new PriorityQueue<>(new Comparator<Integer>() {
// @Override
// public int compare(Integer o1, Integer o2) {
// return o2 - o1;
// }
// });
//
// queue1.offer(5);
// queue1.offer(7);
// queue1.offer(3);
// queue1.offer(2);
//
// System.out.println(queue1);//同理,每次排在首位的为当前queue中最大的
}