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