阅读(4860) (0)

鸿蒙OS PriorityQueue

2022-06-16 16:27:13 更新

PriorityQueue

java.lang.Object

|---java.util.AbstractCollection<E&

|---|---java.util.AbstractQueue<E&

|---|---|---java.util.PriorityQueue<E&

public class PriorityQueue<E>
extends AbstractQueue<E>
implements Serializable

基于优先级堆的无界优先级队列。 优先级队列的元素根据它们的 Comparable 或在队列构造时提供的 Comparator 排序,具体取决于使用的构造函数。 优先级队列不允许空元素。 依赖于自然排序的优先级队列也不允许插入不可比较的对象(这样做可能会导致 ClassCastException)。

此队列的头部是相对于指定排序的最小元素。 如果多个元素以最低值绑定,则头部是这些元素之一——绑定被任意打破。 队列检索操作 poll、remove、peek 和 element 访问队列头部的元素。

优先级队列是无界的,但具有控制用于存储队列元素的数组大小的内部容量。 它总是至少与队列大小一样大。 随着元素被添加到优先级队列中,其容量会自动增长。 增长政策的细节没有具体说明。

此类及其迭代器实现了 Collection 和 Iterator 接口的所有可选方法。 方法 iterator() 中提供的 Iterator 不能保证以任何特定顺序遍历优先级队列的元素。 如果您需要有序遍历,请考虑使用 Arrays.sort(pq.toArray())。

请注意,此实现不同步。 如果任何线程修改队列,则多个线程不应同时访问 PriorityQueue 实例。 相反,请使用线程安全的 PriorityBlockingQueue 类。

实现说明:此实现为入队和出队方法(offer、poll、remove() 和 add)提供 O(log(n)) 时间; remove(Object) 和 contains(Object) 方法的线性时间; 检索方法(peek、元素和大小)的恒定时间。

此类是 Java 集合框架的成员。

构造函数摘要

构造函数 描述
PriorityQueue() 创建一个具有默认初始容量 (11) 的 PriorityQueue,根据它们的 Comparable 对其元素进行排序。
PriorityQueue(int initialCapacity) 创建一个具有指定初始容量的 PriorityQueue,根据它们的 Comparable 对其元素进行排序。
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 add(E e) 将指定元素插入此优先级队列。
void clear() 从此优先级队列中删除所有元素。
Comparator<? super E> comparator() 返回用于对该队列中的元素进行排序的比较器,如果此队列根据其元素的 Comparable 进行排序,则返回 null。
boolean contains(Object o) 如果此队列包含指定元素,则返回 true。
IteratorE iterator() 返回此队列中元素的迭代器。
boolean offer(E e) 将指定元素插入此优先级队列。
E peek() 检索但不删除此队列的头部,如果此队列为空,则返回 null。
E poll() 检索并删除此队列的头部,如果此队列为空,则返回 null。
boolean remove(Object o) 从此队列中移除指定元素的单个实例(如果存在)。
int size() 返回此集合中的元素数。
SpliteratorE spliterator() 在此队列中的元素上创建一个后期绑定和快速失败的拆分器。
Object[] toArray() 返回一个包含此队列中所有元素的数组。
<T> T[] toArray(T[] a) 返回一个包含此队列中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型。
从类 java.util.AbstractCollection 继承的方法
containsAll, isEmpty, removeAll, retainAll, toString
从类 java.util.AbstractQueue 继承的方法
addAll, element, remove
从接口 java.util.Collection 继承的方法
containsAll, equals, hashCode, isEmpty, parallelStream, removeAll, removeIf, retainAll, stream
从接口 java.lang.Iterable 继承的方法
forEach
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

构造函数详细信息

PriorityQueue

public PriorityQueue()

创建一个具有默认初始容量 (11) 的 PriorityQueue,根据它们的 Comparable 对其元素进行排序。

PriorityQueue

public PriorityQueue(int initialCapacity)

创建一个具有指定初始容量的 PriorityQueue,根据它们的 Comparable 对其元素进行排序。

参数:

参数名称 参数描述
initialCapacity 此优先级队列的初始容量

Throws:

Throw名称 Throw描述
IllegalArgumentException 如果 initialCapacity 小于 1

PriorityQueue

public PriorityQueue(Comparator<? super E> comparator)

创建一个具有默认初始容量的 PriorityQueue,其元素根据指定的比较器进行排序。

参数:

参数名称 参数描述
comparator 将用于排序此优先级队列的比较器。 如果为 null,则将使用元素的 Comparable。

PriorityQueue

public PriorityQueue(int initialCapacity, Comparator<? super E> comparator)

创建一个具有指定初始容量的 PriorityQueue,它根据指定的比较器对其元素进行排序。

参数:

参数名称 参数描述
initialCapacity 此优先级队列的初始容量
comparator 将用于排序此优先级队列的比较器。 如果为 null,则将使用元素的 Comparable。

Throws:

Throw名称 Throw描述
IllegalArgumentException 如果 initialCapacity 小于 1

PriorityQueue

public PriorityQueue(Collection<? extends E> c)

创建一个包含指定集合中元素的 PriorityQueue。 如果指定的集合是一个 SortedSet 的实例或者是另一个 PriorityQueue,那么这个优先级队列将按照相同的顺序进行排序。 否则,此优先级队列将根据其元素的 Comparable 进行排序。

参数:

参数名称 参数描述
c 将其元素放入此优先级队列的集合

Throws:

Throw名称 Throw描述
ClassCastException 如果指定集合的元素不能根据优先级队列的顺序相互比较
NullPointerException 如果指定的集合或其任何元素为空

PriorityQueue

public PriorityQueue(PriorityQueue<? extends E> c)

创建一个包含指定优先级队列中元素的 PriorityQueue。 此优先级队列将按照与给定优先级队列相同的顺序进行排序。

参数:

参数名称 参数描述
c 将其元素放入此优先级队列的优先级队列

Throws:

Throw名称 Throw描述
ClassCastException 如果 c 的元素不能根据 c 的顺序相互比较
NullPointerException 如果指定的优先级队列或其任何元素为空

PriorityQueue

public PriorityQueue(SortedSet<? extends E> c)

创建一个包含指定排序集中元素的 PriorityQueue。 此优先级队列将按照与给定排序集相同的顺序进行排序。

参数:

参数名称 参数描述
c 将其元素放入此优先级队列的有序集合

Throws:

Throw名称 Throw描述
ClassCastException 如果指定的有序集合的元素不能根据有序集合的顺序相互比较
NullPointerException 如果指定的排序集或其任何元素为空

方法详情

add

public boolean add(E e)

将指定元素插入此优先级队列。

指定者:

添加接口CollectionE

指定者:

添加接口QueueE

覆盖:

添加类 AbstractQueueE

参数:

参数名称 参数描述
e 要添加的元素

返回:

true(由 Collection#add 指定)

Throws:

Throw名称 Throw描述
ClassCastException 如果指定的元素不能根据优先级队列的顺序与当前在此优先级队列中的元素进行比较
NullPointerException 如果指定元素为空

offer

public boolean offer(E e)

将指定元素插入此优先级队列。

指定者:

接口QueueE中的offer

参数:

参数名称 参数描述
e 要添加的元素

返回:

true(由 Queue#offer 指定)

Throws:

Throw名称 Throw描述
ClassCastException 如果指定的元素不能根据优先级队列的顺序与当前在此优先级队列中的元素进行比较
NullPointerException 如果指定元素为空

peek

public E peek()

从接口复制的描述:队列

检索但不删除此队列的头部,如果此队列为空,则返回 null。

指定者:

查看接口 QueueE

返回:

此队列的头部,如果此队列为空,则返回 null

remove

public boolean remove(Object o)

从此队列中移除指定元素的单个实例(如果存在)。 更正式地说,如果该队列包含一个或多个这样的元素,则删除一个元素 e 使得 o.equals(e)。 当且仅当此队列包含指定元素时(或等效地,如果此队列因调用而更改)返回 true。

指定者:

在接口 CollectionE 中删除

覆盖:

在类 AbstractCollectionE 中删除

参数:

参数名称 参数描述
o 要从此队列中删除的元素(如果存在)

返回:

如果此队列因调用而更改,则为 true

contains

public boolean contains(Object o)

如果此队列包含指定元素,则返回 true。 更正式地说,当且仅当此队列包含至少一个元素 e 使得 o.equals(e) 时才返回 true。

指定者:

包含在接口 CollectionE 中

覆盖:

包含在类 AbstractCollectionE 中

参数:

参数名称 参数描述
o 要检查此队列中包含的对象

返回:

如果此队列包含指定元素,则为 true

toArray

public Object[] toArray()

返回一个包含此队列中所有元素的数组。 元素没有特定的顺序。

返回的数组将是“安全的”,因为该队列不维护对它的引用。 (换句话说,这个方法必须分配一个新数组)。 因此,调用者可以自由修改返回的数组。

此方法充当基于数组和基于集合的 API 之间的桥梁。

指定者:

接口 CollectionE 中的 toArray

覆盖:

AbstractCollectionE 类中的 toArray

返回:

包含此队列中所有元素的数组

toArray

public <T> T[] toArray(T[] a)

返回一个包含此队列中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型。 返回的数组元素没有特定的顺序。 如果队列适合指定的数组,则在其中返回。 否则,将使用指定数组的运行时类型和此队列的大小分配一个新数组。

如果队列适合指定的数组并有剩余空间(即,数组的元素多于队列),则数组中紧跟集合末尾的元素设置为 null。

与 toArray() 方法一样,此方法充当基于数组的 API 和基于集合的 API 之间的桥梁。 此外,此方法允许对输出数组的运行时类型进行精确控制,并且在某些情况下可用于节省分配成本。

假设 x 是一个已知仅包含字符串的队列。 以下代码可用于将队列转储到新分配的 String 数组中:

 String[] y = x.toArray(new String[0]);

请注意,toArray(new Object[0]) 在功能上与 toArray() 相同。

指定者:

接口 CollectionE 中的 toArray

覆盖:

AbstractCollectionE 类中的 toArray

类型参数:

类型参数名称 类型参数描述
T 包含集合的数组的运行时类型

参数:

参数名称 参数描述
a 存储队列元素的数组,如果它足够大的话; 否则,将为此目的分配相同运行时类型的新数组。

返回:

包含此队列中所有元素的数组

Throws:

Throw名称 Throw描述
ArrayStoreException 如果指定数组的运行时类型不是此队列中每个元素的运行时类型的超类型
NullPointerException 如果指定的数组为空

iterator

public IteratorE iterator()

返回此队列中元素的迭代器。 迭代器不会以任何特定顺序返回元素。

指定者:

接口 CollectionE 中的迭代器

指定者:

接口 IterableE 中的迭代器

指定者:

AbstractCollectionE 类中的迭代器

返回:

此队列中元素的迭代器

size

public int size()

从接口复制的描述:集合

返回此集合中的元素数。 如果此集合包含多个 Integer.MAX_VALUE 元素,则返回 Integer.MAX_VALUE。

指定者:

接口 CollectionE 中的大小

指定者:

AbstractCollectionE 类中的大小

返回:

此集合中的元素数

clear

public void clear()

从此优先级队列中删除所有元素。 此调用返回后,队列将为空。

指定者:

在界面 CollectionE 中清除

覆盖:

在类 AbstractQueueE 中清除

poll

public E poll()

从接口复制的描述:队列

检索并删除此队列的头部,如果此队列为空,则返回 null。

指定者:

在接口 QueueE 中轮询

返回:

此队列的头部,如果此队列为空,则返回 null

comparator

public Comparator<? super E> comparator()

返回用于对该队列中的元素进行排序的比较器,如果此队列根据其元素的 Comparable 进行排序,则返回 null。

返回:

用于排序此队列的比较器,如果此队列根据其元素的自然顺序排序,则为 null

spliterator

public final SpliteratorE spliterator()

在此队列中的元素上创建一个后期绑定和快速失败的拆分器。

Spliterator 报告 Spliterator#SIZED、Spliterator#SUBSIZED 和 Spliterator#NONNULL。 覆盖实现应记录附加特征值的报告。

指定者:

接口 CollectionE 中的分离器

指定者:

接口 IterableE 中的分离器

返回:

在此队列中的元素上的 Spliterator