鴻蒙OS PriorityQueue

2022-08-01 15:30 更新

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

基于優(yōu)先級堆的無界優(yōu)先級隊列。 優(yōu)先級隊列的元素根據(jù)它們的 Comparable 或在隊列構(gòu)造時提供的 Comparator 排序,具體取決于使用的構(gòu)造函數(shù)。 優(yōu)先級隊列不允許空元素。 依賴于自然排序的優(yōu)先級隊列也不允許插入不可比較的對象(這樣做可能會導(dǎo)致 ClassCastException)。

此隊列的頭部是相對于指定排序的最小元素。 如果多個元素以最低值綁定,則頭部是這些元素之一——綁定被任意打破。 隊列檢索操作 poll、remove、peek 和 element 訪問隊列頭部的元素。

優(yōu)先級隊列是無界的,但具有控制用于存儲隊列元素的數(shù)組大小的內(nèi)部容量。 它總是至少與隊列大小一樣大。 隨著元素被添加到優(yōu)先級隊列中,其容量會自動增長。 增長政策的細(xì)節(jié)沒有具體說明。

此類及其迭代器實(shí)現(xiàn)了 Collection 和 Iterator 接口的所有可選方法。 方法 iterator() 中提供的 Iterator 不能保證以任何特定順序遍歷優(yōu)先級隊列的元素。 如果您需要有序遍歷,請考慮使用 Arrays.sort(pq.toArray())。

請注意,此實(shí)現(xiàn)不同步。 如果任何線程修改隊列,則多個線程不應(yīng)同時訪問 PriorityQueue 實(shí)例。 相反,請使用線程安全的 PriorityBlockingQueue 類。

實(shí)現(xiàn)說明:此實(shí)現(xiàn)為入隊和出隊方法(offer、poll、remove() 和 add)提供 O(log(n)) 時間; remove(Object) 和 contains(Object) 方法的線性時間; 檢索方法(peek、元素和大小)的恒定時間。

此類是 Java 集合框架的成員。

構(gòu)造函數(shù)摘要

構(gòu)造函數(shù) 描述
PriorityQueue() 創(chuàng)建一個具有默認(rèn)初始容量 (11) 的 PriorityQueue,根據(jù)它們的 Comparable 對其元素進(jìn)行排序。
PriorityQueue(int initialCapacity) 創(chuàng)建一個具有指定初始容量的 PriorityQueue,根據(jù)它們的 Comparable 對其元素進(jìn)行排序。
PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 創(chuàng)建一個具有指定初始容量的 PriorityQueue,它根據(jù)指定的比較器對其元素進(jìn)行排序。
PriorityQueue(Collection<? extends E> c) 創(chuàng)建一個包含指定集合中元素的 PriorityQueue。
PriorityQueue(Comparator<? super E> comparator) 創(chuàng)建一個具有默認(rèn)初始容量的 PriorityQueue,其元素根據(jù)指定的比較器進(jìn)行排序。
PriorityQueue(PriorityQueue<? extends E> c) 創(chuàng)建一個包含指定優(yōu)先級隊列中元素的 PriorityQueue。
PriorityQueue(SortedSet<? extends E> c) 創(chuàng)建一個包含指定排序集中元素的 PriorityQueue。

方法總結(jié)

修飾符和類型 方法 描述
boolean add(E e) 將指定元素插入此優(yōu)先級隊列。
void clear() 從此優(yōu)先級隊列中刪除所有元素。
Comparator<? super E> comparator() 返回用于對該隊列中的元素進(jìn)行排序的比較器,如果此隊列根據(jù)其元素的 Comparable 進(jìn)行排序,則返回 null。
boolean contains(Object o) 如果此隊列包含指定元素,則返回 true。
IteratorE iterator() 返回此隊列中元素的迭代器。
boolean offer(E e) 將指定元素插入此優(yōu)先級隊列。
E peek() 檢索但不刪除此隊列的頭部,如果此隊列為空,則返回 null。
E poll() 檢索并刪除此隊列的頭部,如果此隊列為空,則返回 null。
boolean remove(Object o) 從此隊列中移除指定元素的單個實(shí)例(如果存在)。
int size() 返回此集合中的元素數(shù)。
SpliteratorE spliterator() 在此隊列中的元素上創(chuàng)建一個后期綁定和快速失敗的拆分器。
Object[] toArray() 返回一個包含此隊列中所有元素的數(shù)組。
<T> T[] toArray(T[] a) 返回一個包含此隊列中所有元素的數(shù)組; 返回數(shù)組的運(yùn)行時類型是指定數(shù)組的運(yùn)行時類型。
從類 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

構(gòu)造函數(shù)詳細(xì)信息

PriorityQueue

public PriorityQueue()

創(chuàng)建一個具有默認(rèn)初始容量 (11) 的 PriorityQueue,根據(jù)它們的 Comparable 對其元素進(jìn)行排序。

PriorityQueue

public PriorityQueue(int initialCapacity)

創(chuàng)建一個具有指定初始容量的 PriorityQueue,根據(jù)它們的 Comparable 對其元素進(jìn)行排序。

參數(shù):

參數(shù)名稱 參數(shù)描述
initialCapacity 此優(yōu)先級隊列的初始容量

Throws:

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

PriorityQueue

public PriorityQueue(Comparator<? super E> comparator)

創(chuàng)建一個具有默認(rèn)初始容量的 PriorityQueue,其元素根據(jù)指定的比較器進(jìn)行排序。

參數(shù):

參數(shù)名稱 參數(shù)描述
comparator 將用于排序此優(yōu)先級隊列的比較器。 如果為 null,則將使用元素的 Comparable。

PriorityQueue

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

創(chuàng)建一個具有指定初始容量的 PriorityQueue,它根據(jù)指定的比較器對其元素進(jìn)行排序。

參數(shù):

參數(shù)名稱 參數(shù)描述
initialCapacity 此優(yōu)先級隊列的初始容量
comparator 將用于排序此優(yōu)先級隊列的比較器。 如果為 null,則將使用元素的 Comparable。

Throws:

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

PriorityQueue

public PriorityQueue(Collection<? extends E> c)

創(chuàng)建一個包含指定集合中元素的 PriorityQueue。 如果指定的集合是一個 SortedSet 的實(shí)例或者是另一個 PriorityQueue,那么這個優(yōu)先級隊列將按照相同的順序進(jìn)行排序。 否則,此優(yōu)先級隊列將根據(jù)其元素的 Comparable 進(jìn)行排序。

參數(shù):

參數(shù)名稱 參數(shù)描述
c 將其元素放入此優(yōu)先級隊列的集合

Throws:

Throw名稱 Throw描述
ClassCastException 如果指定集合的元素不能根據(jù)優(yōu)先級隊列的順序相互比較
NullPointerException 如果指定的集合或其任何元素為空

PriorityQueue

public PriorityQueue(PriorityQueue<? extends E> c)

創(chuàng)建一個包含指定優(yōu)先級隊列中元素的 PriorityQueue。 此優(yōu)先級隊列將按照與給定優(yōu)先級隊列相同的順序進(jìn)行排序。

參數(shù):

參數(shù)名稱 參數(shù)描述
c 將其元素放入此優(yōu)先級隊列的優(yōu)先級隊列

Throws:

Throw名稱 Throw描述
ClassCastException 如果 c 的元素不能根據(jù) c 的順序相互比較
NullPointerException 如果指定的優(yōu)先級隊列或其任何元素為空

PriorityQueue

public PriorityQueue(SortedSet<? extends E> c)

創(chuàng)建一個包含指定排序集中元素的 PriorityQueue。 此優(yōu)先級隊列將按照與給定排序集相同的順序進(jìn)行排序。

參數(shù):

參數(shù)名稱 參數(shù)描述
c 將其元素放入此優(yōu)先級隊列的有序集合

Throws:

Throw名稱 Throw描述
ClassCastException 如果指定的有序集合的元素不能根據(jù)有序集合的順序相互比較
NullPointerException 如果指定的排序集或其任何元素為空

方法詳情

add

public boolean add(E e)

將指定元素插入此優(yōu)先級隊列。

指定者:

添加接口CollectionE

指定者:

添加接口QueueE

覆蓋:

添加類 AbstractQueueE

參數(shù):

參數(shù)名稱 參數(shù)描述
e 要添加的元素

返回:

true(由 Collection#add 指定)

Throws:

Throw名稱 Throw描述
ClassCastException 如果指定的元素不能根據(jù)優(yōu)先級隊列的順序與當(dāng)前在此優(yōu)先級隊列中的元素進(jìn)行比較
NullPointerException 如果指定元素為空

offer

public boolean offer(E e)

將指定元素插入此優(yōu)先級隊列。

指定者:

接口QueueE中的offer

參數(shù):

參數(shù)名稱 參數(shù)描述
e 要添加的元素

返回:

true(由 Queue#offer 指定)

Throws:

Throw名稱 Throw描述
ClassCastException 如果指定的元素不能根據(jù)優(yōu)先級隊列的順序與當(dāng)前在此優(yōu)先級隊列中的元素進(jìn)行比較
NullPointerException 如果指定元素為空

peek

public E peek()

從接口復(fù)制的描述:隊列

檢索但不刪除此隊列的頭部,如果此隊列為空,則返回 null。

指定者:

查看接口 QueueE

返回:

此隊列的頭部,如果此隊列為空,則返回 null

remove

public boolean remove(Object o)

從此隊列中移除指定元素的單個實(shí)例(如果存在)。 更正式地說,如果該隊列包含一個或多個這樣的元素,則刪除一個元素 e 使得 o.equals(e)。 當(dāng)且僅當(dāng)此隊列包含指定元素時(或等效地,如果此隊列因調(diào)用而更改)返回 true。

指定者:

在接口 CollectionE 中刪除

覆蓋:

在類 AbstractCollectionE 中刪除

參數(shù):

參數(shù)名稱 參數(shù)描述
o 要從此隊列中刪除的元素(如果存在)

返回:

如果此隊列因調(diào)用而更改,則為 true

contains

public boolean contains(Object o)

如果此隊列包含指定元素,則返回 true。 更正式地說,當(dāng)且僅當(dāng)此隊列包含至少一個元素 e 使得 o.equals(e) 時才返回 true。

指定者:

包含在接口 CollectionE 中

覆蓋:

包含在類 AbstractCollectionE 中

參數(shù):

參數(shù)名稱 參數(shù)描述
o 要檢查此隊列中包含的對象

返回:

如果此隊列包含指定元素,則為 true

toArray

public Object[] toArray()

返回一個包含此隊列中所有元素的數(shù)組。 元素沒有特定的順序。

返回的數(shù)組將是“安全的”,因?yàn)樵撽犃胁痪S護(hù)對它的引用。 (換句話說,這個方法必須分配一個新數(shù)組)。 因此,調(diào)用者可以自由修改返回的數(shù)組。

此方法充當(dāng)基于數(shù)組和基于集合的 API 之間的橋梁。

指定者:

接口 CollectionE 中的 toArray

覆蓋:

AbstractCollectionE 類中的 toArray

返回:

包含此隊列中所有元素的數(shù)組

toArray

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

返回一個包含此隊列中所有元素的數(shù)組; 返回數(shù)組的運(yùn)行時類型是指定數(shù)組的運(yùn)行時類型。 返回的數(shù)組元素沒有特定的順序。 如果隊列適合指定的數(shù)組,則在其中返回。 否則,將使用指定數(shù)組的運(yùn)行時類型和此隊列的大小分配一個新數(shù)組。

如果隊列適合指定的數(shù)組并有剩余空間(即,數(shù)組的元素多于隊列),則數(shù)組中緊跟集合末尾的元素設(shè)置為 null。

與 toArray() 方法一樣,此方法充當(dāng)基于數(shù)組的 API 和基于集合的 API 之間的橋梁。 此外,此方法允許對輸出數(shù)組的運(yùn)行時類型進(jìn)行精確控制,并且在某些情況下可用于節(jié)省分配成本。

假設(shè) x 是一個已知僅包含字符串的隊列。 以下代碼可用于將隊列轉(zhuǎn)儲到新分配的 String 數(shù)組中:

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

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

指定者:

接口 CollectionE 中的 toArray

覆蓋:

AbstractCollectionE 類中的 toArray

類型參數(shù):

類型參數(shù)名稱 類型參數(shù)描述
T 包含集合的數(shù)組的運(yùn)行時類型

參數(shù):

參數(shù)名稱 參數(shù)描述
a 存儲隊列元素的數(shù)組,如果它足夠大的話; 否則,將為此目的分配相同運(yùn)行時類型的新數(shù)組。

返回:

包含此隊列中所有元素的數(shù)組

Throws:

Throw名稱 Throw描述
ArrayStoreException 如果指定數(shù)組的運(yùn)行時類型不是此隊列中每個元素的運(yùn)行時類型的超類型
NullPointerException 如果指定的數(shù)組為空

iterator

public IteratorE iterator()

返回此隊列中元素的迭代器。 迭代器不會以任何特定順序返回元素。

指定者:

接口 CollectionE 中的迭代器

指定者:

接口 IterableE 中的迭代器

指定者:

AbstractCollectionE 類中的迭代器

返回:

此隊列中元素的迭代器

size

public int size()

從接口復(fù)制的描述:集合

返回此集合中的元素數(shù)。 如果此集合包含多個 Integer.MAX_VALUE 元素,則返回 Integer.MAX_VALUE。

指定者:

接口 CollectionE 中的大小

指定者:

AbstractCollectionE 類中的大小

返回:

此集合中的元素數(shù)

clear

public void clear()

從此優(yōu)先級隊列中刪除所有元素。 此調(diào)用返回后,隊列將為空。

指定者:

在界面 CollectionE 中清除

覆蓋:

在類 AbstractQueueE 中清除

poll

public E poll()

從接口復(fù)制的描述:隊列

檢索并刪除此隊列的頭部,如果此隊列為空,則返回 null。

指定者:

在接口 QueueE 中輪詢

返回:

此隊列的頭部,如果此隊列為空,則返回 null

comparator

public Comparator<? super E> comparator()

返回用于對該隊列中的元素進(jìn)行排序的比較器,如果此隊列根據(jù)其元素的 Comparable 進(jìn)行排序,則返回 null。

返回:

用于排序此隊列的比較器,如果此隊列根據(jù)其元素的自然順序排序,則為 null

spliterator

public final SpliteratorE spliterator()

在此隊列中的元素上創(chuàng)建一個后期綁定和快速失敗的拆分器。

Spliterator 報告 Spliterator#SIZED、Spliterator#SUBSIZED 和 Spliterator#NONNULL。 覆蓋實(shí)現(xiàn)應(yīng)記錄附加特征值的報告。

指定者:

接口 CollectionE 中的分離器

指定者:

接口 IterableE 中的分離器

返回:

在此隊列中的元素上的 Spliterator

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號