优先级队列(PriorityQueue)
 - 1. PriorityQueue的特性
 - 2. PriorityQueue常用方法介绍
 -  
 
 
  
 
1. PriorityQueue的特性
 
- 使用时必须导入PriorityQueue所在的包,即
 import java.util.PriorityQueue; - PriorityQueue中所放置的元素必须能够比较大小,不能插入无法比较大小的对象,否则会抛出ClassCastException异常(类型转换异常)
 - 不能插入null对象,否则会抛出NullPointerException异常(空指针异常)
 - 没有容量限制,可以插入任意多个元素,其内部可以自动扩容
 - 插入元素和删除元素的时间复杂度都是O(log2N)
 - PriorityQueue底层是使用堆这种数据结构
 - PriorityQueue默认情况下是小根堆,即每次获取到的元素都是最小的元素
 
 
2. PriorityQueue常用方法介绍
 
常用构造方法
 

 
- 第一个是无参的构造方法
 - 第二个构造方法是创建一个初始容量为形参的优先级队列,注意:传过去的形参不能小于1,否则会抛出IllegalArgumentException异常。一般在创建优先级队列对象时,如果知道元素个数,建议直接将底层容量给好,如果后续需要扩容时,需要开辟更大的空间,拷贝元素,这样效率会比较低
 - 第三个构造方法是传比较器,设置该优先级队列底层是建大根堆还是小根堆,默认是建小根堆;另外,建堆的元素是一个个对象时,需要传比较器
 - 第四个构造方法是既设置了优先级队列的初始容量,又传了比较器
 - 第五个构造方法是用一个集合来创建优先级队列
 
 
public class Test {public static void main(String[] args) {PriorityQueue<Integer> q1 = new PriorityQueue<>();PriorityQueue<Integer> q2 = new PriorityQueue<>(100);ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);PriorityQueue<Integer> q3 = new PriorityQueue<>(list);}
}
 
常用的普通方法
 
- boolean offer(E e)
 插入元素e - E peek()
 获取优先级最高的元素,若优先级队列为空,则返回null - E poll()
 移除优先级最高的元素,如果优先级队列为空,则返回null - int size()
 获取有效元素的个数 - void clear()
 清空优先级队列 - boolean isEmpty()
 判断优先级队列是否为空,为空则返回true