You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

32 lines
2.4 KiB

## 一、基础
基于堆实现的优先队列堆是由数组实现的完全二叉树。是最小堆的实现在最小堆中_父节点的值比每一个子节点的值都要小_。从源码可以看出使用Object[]数组实现并且默认容量为11。
![[Snipaste_2023-02-09_10-26-31.png]]
从构造函数可以看出,可以传入自定义比较器,如果使用默认比较器则是自然顺序或字典序
![[Snipaste_2023-02-09_10-30-20.png]]
其中的方法:
+ boolean addobject将指定的元素插入此优先级队列。
+ boolean offerobject将指定的元素插入此优先级队列。
+ boolean removeobject从此队列中删除指定元素的单个实例如果存在
+ Object poll检索并删除此队列的头部如果此队列为空则返回null。
+ Object element检索但不删除此队列的头部如果此队列为空则返回null。
+ Object peek检索但不删除此队列的头部如果此队列为空则返回null。
+ void clear从此优先级队列中删除所有元素。
+ Comparator comparator返回用于对此队列中的元素进行排序的比较器如果此队列根据其元素的自然顺序排序则返回null。
+ boolean containsObject o如果此队列包含指定的元素则返回true。
+ Iterator iterator返回此队列中元素的迭代器。
+ int size返回此队列中的元素数。
+ Object [] toArray返回包含此队列中所有元素的数组。
## 二、特点
- PriorityQueue是一个无限制的队列并且动态增长数组自动扩50%或两倍容量)。默认初始容量`'11'`可以使用相应构造函数中的**initialCapacity**参数覆盖。
- 它不允许NULL对象。
- 添加到PriorityQueue的对象必须具有可比性。
- **默认情况下,**优先级队列的对象**按自然顺序排序**。
- 比较器可用于队列中对象的自定义排序。
- 优先级队列的**头部**是基于自然排序或基于比较器的排序的**最小**元素。当我们轮询队列时,它从队列中返回头对象。
- 如果存在多个具有相同优先级的对象,则它可以随机轮询其中任何一个。
- PriorityQueue **不是线程安全的**。`PriorityBlockingQueue`在并发环境中使用。
- 它为add和poll方法提供了**Ologn**时间。