- 类型参数:
E- 此队列中保存的元素类型
- 所有已实现的接口:
Serializable,Iterable<E>,Collection<E>,Queue<E>
Comparator 排序,具体取决于使用的构造函数。优先级队列不允许 null 个元素。依赖自然排序的优先级队列也不允许插入不可比较的对象(这样做可能会导致 ClassCastException )。
此队列的 head 是关于指定排序的 least 元素。如果多个元素为最小值绑定,则头部是这些元素之一——任意打破绑定。队列检索操作 poll、remove、peek 和 element 访问队列头部的元素。
优先级队列是无界的,但有一个内部capacity管理用于存储队列中元素的数组的大小。它总是至少与队列大小一样大。随着元素被添加到优先级队列中,其容量会自动增长。增长策略的细节没有具体说明。
此类及其迭代器实现了 Collection 和 Iterator 接口的所有 optional 方法。方法 iterator() 中提供的迭代器和方法 spliterator() 中提供的 Spliterator not 保证以任何特定顺序遍历优先级队列的元素。如果您需要有序遍历,请考虑使用 Arrays.sort(pq.toArray()) 。
请注意,此实现不是同步的。 如果任何线程修改队列,多个线程不应同时访问 PriorityQueue 实例。相反,使用线程安全的 PriorityBlockingQueue 类。
实施说明:此实施为入队和出队方法(offer、poll、remove() 和add)提供了 O(log(n)) 时间; remove(Object) 和 contains(Object) 方法的线性时间;和检索方法的常数时间(peek、element 和 size)。
此类是 Java 集合框架 的成员。
- 自从:
- 1.5
- 参见:
-
构造方法总结
构造方法构造方法描述创建一个具有默认初始容量 (11) 的PriorityQueue,根据它们的 自然排序 对其元素进行排序。PriorityQueue(int initialCapacity) 创建一个具有指定初始容量的PriorityQueue,它根据元素的 自然排序 对其元素进行排序。PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 创建一个具有指定初始容量的PriorityQueue,它根据指定的比较器对其元素进行排序。PriorityQueue(Collection<? extends E> c) 创建一个包含指定集合中的元素的PriorityQueue。PriorityQueue(Comparator<? super E> comparator) 创建一个具有默认初始容量且其元素根据指定比较器排序的PriorityQueue。PriorityQueue(PriorityQueue<? extends E> c) 创建一个包含指定优先级队列中元素的PriorityQueue。PriorityQueue(SortedSet<? extends E> c) 创建一个PriorityQueue包含指定排序集中的元素。 -
方法总结
修饰符和类型方法描述boolean将指定元素插入此优先级队列。voidclear()从此优先级队列中删除所有元素。Comparator<? super E>返回用于对该队列中的元素进行排序的比较器,如果该队列是根据其元素的 自然排序 排序的,则返回null。boolean如果此队列包含指定元素,则返回true。void对Iterable的每个元素执行给定的操作,直到处理完所有元素或操作引发异常。iterator()返回此队列中元素的迭代器。boolean将指定元素插入此优先级队列。peek()检索但不删除此队列的头部,如果此队列为空,则返回null。poll()检索并删除此队列的头部,如果此队列为空,则返回null。boolean从此队列中移除指定元素的单个实例(如果存在)。booleanremoveAll(Collection<?> c) 删除此集合的所有也包含在指定集合中的元素(可选操作)。boolean移除此集合中满足给定谓词的所有元素。booleanretainAll(Collection<?> c) 仅保留此集合中包含在指定集合中的元素(可选操作)。intsize()返回此集合中的元素数。final Spliterator<E>在此队列中的元素上创建 late-binding 和 fail-fastSpliterator。Object[]toArray()返回包含此队列中所有元素的数组。<T> T[]toArray(T[] a) 返回一个包含此队列中所有元素的数组;返回数组的运行时类型是指定数组的类型。在类 java.util.AbstractQueue 中声明的方法
addAll, element, remove在类 java.util.AbstractCollection 中声明的方法
containsAll, isEmpty, toString在类 java.lang.Object 中声明的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait在接口 java.util.Collection 中声明的方法
containsAll, equals, hashCode, isEmpty, parallelStream, stream, toArray
-
构造方法详细信息
-
PriorityQueue
public PriorityQueue()创建一个具有默认初始容量 (11) 的PriorityQueue,根据它们的 自然排序 对其元素进行排序。 -
PriorityQueue
public PriorityQueue(int initialCapacity) 创建一个具有指定初始容量的PriorityQueue,它根据元素的 自然排序 对其元素进行排序。- 参数:
initialCapacity- 此优先级队列的初始容量- 抛出:
IllegalArgumentException- 如果initialCapacity小于 1
-
PriorityQueue
创建一个具有默认初始容量且其元素根据指定比较器排序的PriorityQueue。- 参数:
comparator- 将用于排序此优先级队列的比较器。如果是null,将使用元素的 自然排序 。- 自从:
- 1.8
-
PriorityQueue
创建一个具有指定初始容量的PriorityQueue,它根据指定的比较器对其元素进行排序。- 参数:
initialCapacity- 此优先级队列的初始容量comparator- 将用于排序此优先级队列的比较器。如果是null,将使用元素的 自然排序 。- 抛出:
IllegalArgumentException- 如果initialCapacity小于 1
-
PriorityQueue
创建一个包含指定集合中的元素的PriorityQueue。如果指定的集合是SortedSet的实例或另一个PriorityQueue,则此优先级队列将根据相同的顺序进行排序。否则,此优先级队列将根据其元素的自然排序 进行排序。- 参数:
c- 其元素要放入此优先级队列的集合- 抛出:
ClassCastException- 如果指定集合的元素不能根据优先级队列的顺序相互比较NullPointerException- 如果指定的集合或其任何元素为空
-
PriorityQueue
创建一个包含指定优先级队列中元素的PriorityQueue。该优先级队列将按照与给定优先级队列相同的顺序进行排序。- 参数:
c- 其元素要放入此优先级队列的优先级队列- 抛出:
ClassCastException- 如果c的元素不能根据c的顺序相互比较NullPointerException- 如果指定的优先级队列或其任何元素为空
-
PriorityQueue
创建一个PriorityQueue包含指定排序集中的元素。该优先级队列将按照与给定排序集相同的顺序进行排序。- 参数:
c- 其元素要放入此优先级队列的有序集合- 抛出:
ClassCastException- 如果指定的有序集合的元素不能根据有序集合的顺序相互比较NullPointerException- 如果指定的排序集或其任何元素为空
-
-
方法详情
-
add
将指定元素插入此优先级队列。- 指定者:
add在接口Collection<E>中- 指定者:
add在接口Queue<E>中- 重写:
add在类AbstractQueue<E>中- 参数:
e- 要添加的元素- 返回:
true(由Collection.add(E)指定)- 抛出:
ClassCastException- 如果根据优先级队列的顺序无法将指定元素与当前在此优先级队列中的元素进行比较NullPointerException- 如果指定元素为空
-
offer
将指定元素插入此优先级队列。- 指定者:
offer在接口Queue<E>中- 参数:
e- 要添加的元素- 返回:
true(由Queue.offer(E)指定)- 抛出:
ClassCastException- 如果根据优先级队列的顺序无法将指定元素与当前在此优先级队列中的元素进行比较NullPointerException- 如果指定元素为空
-
peek
从接口Queue复制的描述检索但不删除此队列的头部,如果此队列为空,则返回null。 -
remove
从此队列中移除指定元素的单个实例(如果存在)。更正式地说,如果此队列包含一个或多个此类元素,则删除一个元素e使得o.equals(e)。当且仅当此队列包含指定元素时返回true(或者等效地,如果此队列因调用而更改)。- 指定者:
remove在接口Collection<E>中- 重写:
remove在类AbstractCollection<E>中- 参数:
o- 要从此队列中删除的元素(如果存在)- 返回:
true如果此队列因调用而更改
-
contains
如果此队列包含指定元素,则返回true。更正式地说,返回true当且仅当此队列包含至少一个元素e使得o.equals(e)。- 指定者:
contains在接口Collection<E>中- 重写:
contains在类AbstractCollection<E>中- 参数:
o- 要检查此队列中包含的对象- 返回:
true如果此队列包含指定元素
-
toArray
返回包含此队列中所有元素的数组。这些元素没有特定的顺序。返回的数组将是“安全的”,因为此队列不维护对它的引用。 (换句话说,这个方法必须分配一个新数组)。调用者因此可以自由修改返回的数组。
此方法充当基于数组和基于集合的 API 之间的桥梁。
- 指定者:
toArray在接口Collection<E>中- 重写:
toArray在类AbstractCollection<E>中- 返回:
- 包含此队列中所有元素的数组
-
toArray
public <T> T[] toArray(T[] a) 返回一个包含此队列中所有元素的数组;返回数组的运行时类型是指定数组的类型。返回的数组元素没有特定的顺序。如果队列适合指定的数组,则在其中返回。否则,将分配一个新数组,其中包含指定数组的运行时类型和此队列的大小。如果队列适合指定的数组并有剩余空间(即数组的元素多于队列),则紧跟在集合末尾的数组中的元素将设置为
null。与
toArray()方法一样,此方法充当基于数组和基于集合的 API 之间的桥梁。此外,此方法允许精确控制输出数组的运行时类型,并且在某些情况下可用于节省分配成本。假设
x是已知仅包含字符串的队列。以下代码可用于将队列转储到新分配的String数组中:
请注意,String[] y = x.toArray(new String[0]);toArray(new Object[0])在功能上与toArray()相同。- 指定者:
toArray在接口Collection<E>中- 重写:
toArray在类AbstractCollection<E>中- 类型参数:
T- 包含集合的数组的组件类型- 参数:
a- 要存储队列元素的数组,如果它足够大的话;否则,为此分配一个相同运行时类型的新数组。- 返回:
- 包含此队列中所有元素的数组
- 抛出:
ArrayStoreException- 如果指定数组的运行时类型不是此队列中每个元素的运行时类型的超类型NullPointerException- 如果指定数组为空
-
iterator
返回此队列中元素的迭代器。迭代器不会以任何特定顺序返回元素。- 指定者:
iterator在接口Collection<E>中- 指定者:
iterator在接口Iterable<E>中- 指定者:
iterator在类AbstractCollection<E>中- 返回:
- 此队列中元素的迭代器
-
size
public int size()从接口Collection复制的描述返回此集合中的元素数。如果此集合包含超过Integer.MAX_VALUE个元素,则返回Integer.MAX_VALUE。- 指定者:
size在接口Collection<E>中- 返回:
- 此集合中的元素数
-
clear
public void clear()从此优先级队列中删除所有元素。此调用返回后队列将为空。- 指定者:
clear在接口Collection<E>中- 重写:
clear在类AbstractQueue<E>中
-
poll
从接口Queue复制的描述检索并删除此队列的头部,如果此队列为空,则返回null。 -
comparator
返回用于对该队列中的元素进行排序的比较器,如果该队列是根据其元素的 自然排序 排序的,则返回null。- 返回:
-
用于排序此队列的比较器,或者
null如果此队列是根据其元素的自然顺序排序的
-
spliterator
在此队列中的元素上创建 late-binding 和 fail-fastSpliterator。拆分器不会以任何特定顺序遍历元素(未报告ORDERED特性)。Spliterator报告Spliterator.SIZED、Spliterator.SUBSIZED和Spliterator.NONNULL。覆盖实施应记录附加特征值的报告。- 指定者:
spliterator在接口Collection<E>中- 指定者:
spliterator在接口Iterable<E>中- 返回:
-
a
Spliterator遍历此队列中的元素 - 自从:
- 1.8
-
removeIf
从接口Collection复制的描述移除此集合中满足给定谓词的所有元素。迭代期间或由谓词抛出的错误或运行时异常将传递给调用者。- 指定者:
removeIf在接口Collection<E>中- 参数:
filter- 为要删除的元素返回true的谓词- 返回:
true如果删除了任何元素- 抛出:
NullPointerException- 如果指定的过滤器为空
-
removeAll
从类复制的描述:AbstractCollection删除此集合的所有也包含在指定集合中的元素(可选操作)。此调用返回后,此集合将不包含与指定集合共有的元素。- 指定者:
removeAll在接口Collection<E>中- 重写:
removeAll在类AbstractCollection<E>中- 参数:
c- 包含要从此集合中删除的元素的集合- 返回:
true如果此集合因调用而更改- 抛出:
NullPointerException- 如果此集合包含一个或多个空元素并且指定的集合不支持空元素 (optional),或者如果指定的集合为空- 参见:
-
retainAll
从类复制的描述:AbstractCollection仅保留此集合中包含在指定集合中的元素(可选操作)。换句话说,从该集合中移除所有未包含在指定集合中的元素。- 指定者:
retainAll在接口Collection<E>中- 重写:
retainAll在类AbstractCollection<E>中- 参数:
c- 包含要保留在此集合中的元素的集合- 返回:
true如果此集合因调用而更改- 抛出:
NullPointerException- 如果此集合包含一个或多个空元素并且指定的集合不允许空元素 (optional),或者如果指定的集合为空- 参见:
-
forEach
从接口Iterable复制的描述对Iterable的每个元素执行给定的操作,直到处理完所有元素或操作引发异常。如果指定了迭代顺序,则将按迭代顺序执行操作。操作抛出的异常被转发给调用者。如果操作执行修改元素的底层源的副作用,则此方法的行为是未指定的,除非重写类已指定并发修改策略。
- 指定者:
forEach在接口Iterable<E>中- 参数:
action- 对每个元素执行的操作- 抛出:
NullPointerException- 如果指定的操作为空
-