title: java优先队列
date: 2018-12-16 15:54:20
updated: 2020-03-07 13:39:312020-03-07 13:42:15
categories: java
tags:
- java
此文档为java优先队列的学习总结
java中优先队列和堆的详细使用
我们知道优先队列其实内部实现就是一个堆的数据结构,java默认的是一个小跟堆,每次取出最小的元素,因为堆的性质他可以做到O(logn)级别的插入和删除操作。
demo_小根堆:
Queue<Integer> queue = new PriorityQueue<>();//优先队列,内部实现就是一个小根堆
queue.add(5);
queue.add(3);
queue.add(3);
queue.add(56);
while(!queue.isEmpty())
{
System.out.println(queue.poll());///维护一个堆保证每次取出的都是最小的并出堆
}
out:3、3、5、56
demo_大根堆:
int initialCapacity = 5;//定义一个长度为5的优先队列(且是大根堆)
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(initialCapacity, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
我们知道堆的性质是有:
1.堆中某个结点的值总是不大于(或不小于)其父结点的值;
2.堆总是一棵完全二叉树。
将根结点最大的堆叫做大根堆,根结点最小的堆叫做小根堆。