1.什么是优先级队列
优先级队列就是用库内已有的类,这个类名字是队列,其实不是队列
是一种堆结构。它默认为最小堆,可以通过改比较器,实现最大堆。
2.什么时候用它什么时候不用它
- 当我们只需要做取出,和放入堆的方法时可以使用它
- 为什么我们不在其他时候用它,明明有已有的函数?
- 因为它在其他时候无法做到和手写堆一样时间复杂度低:例如改变某一个节点的值,然后重新实现堆。我们首先可以直接从这个节点开始上下调整就行,但是系统的不能,它只能一次又一次的遍历节点,每一个节点调整
3.它的具体用法
记得import两个库:
import java.util.PriorityQueue;//引用库
import java.util.Comparator;
3.1定义
PriorityQueue<Integer> heap = new PriorityQueue<Integer>();
//这样就实现了优先级队列的定义,但是默认为最小堆
PriorityQueue<Integer> heap = new PriorityQueue<Integer>(11,new Comparator<Integer>(){
public int compare(Integer i1,Integer i2){
return i2-i1;
}
});//通过调用比较器,实现最大堆
3.2输入输出
public static void main(String[] args) {
PriorityQueue<Integer> heap = new PriorityQueue<Integer>(11,new Comparator<Integer>(){
public int compare(Integer i1,Integer i2){
return i2-i1;
}
});
heap.add(3);//加入
heap.add(2);
heap.add(8);
System.out.println(heap.peek());//取顶点
int k= heap.poll();//取顶点加上删去顶点
System.out.println(heap.peek());
System.out.println(k);
}