基本概念:
优先级队列的Java实现是一种特殊的队列,其中元素的排序由其自然排序原则确定(默认最小堆),也可以根据创建期间提供的Comparator进行定制。我们在构造过程中调用的构造函数决定要与优先级队列一起使用的排序原则。与不允许使用null元素的Queue <E>不同,但是某些实现(例如LinkedList)也不禁止插入null元素。但是,PriorityQueue <E>根本不允许空元素。如果优先级队列是根据自然顺序构造的,则任何不可比较的元素插入都将引发ClassCastException。
它被声明为无限制的并且基于优先级堆。尽管队列的大小被称为无限制,但内部具有确定阵列大小的能力。插入元素时,此大小会自动增长。但是,没有详细说明增大尺寸的原理。
JDK自带的优先级队列代码实现
//基于最小堆实现
PriorityQueue<Integer>queue=new PriorityQueue<>();
int []arr={5,4,3,2,1};
for(int i:arr)
{
queue.offer(i);
}
for(int i:arr)
{
System.out.print(queue.poll());
}
//输出结果:1,2,3,4,5
自定义比较器,实现降序排列
//基于最大堆实现
PriorityQueue<Integer>queue=new PriorityQueue<>(new Comparator<Integer>() {
@Overr