1. 程式人生 > >java 中 priorityqueue的使用

java 中 priorityqueue的使用

java.util
類 PriorityQueue<E>

型別引數:
E - collection 中所儲存元素的型別。
public class PriorityQueue<E>
extends AbstractQueue<E>implements Serializable

一個基於優先順序堆的無界優先順序佇列。優先順序佇列的元素按照其自然順序進行排序,或者根據構造佇列時提供的 Comparator 進行排序,具體取決於所使用的構造方法。優先順序佇列不允許使用 null 元素。依靠自然順序的優先順序佇列還不允許插入不可比較的物件(這樣做可能導致 ClassCastException

)。

此佇列的 是按指定排序方式確定的最小 元素。如果多個元素都是最小值,則頭是其中一個元素——選擇方法是任意的。佇列獲取操作 pollremovepeekelement 訪問處於佇列頭的元素。

優先順序佇列是無界的,但是有一個內部容量,控制著用於儲存佇列元素的陣列大小。它通常至少等於佇列的大小。隨著不斷向優先順序佇列新增元素,其容量會自動增加。無需指定容量增加策略的細節。

此類及其迭代器實現了 CollectionIterator 介面的所有可選 方法。方法 iterator() 中提供的迭代器 保證以任何特定的順序遍歷優先順序佇列中的元素。如果需要按順序遍歷,請考慮使用 Arrays.sort(pq.toArray())

注意,此實現不是同步的。如果多個執行緒中的任意執行緒修改了佇列,則這些執行緒不應同時訪問 PriorityQueue 例項。相反,請使用執行緒安全的 PriorityBlockingQueue 類。

實現注意事項:此實現為排隊和出隊方法(offerpollremove()add)提供 O(log(n)) 時間;為 remove(Object)contains(Object) 方法提供線性時間;為獲取方法(peekelementsize)提供固定時間。

從以下版本開始:
1.5
另請參見:
序列化表格
構造方法摘要
          使用預設的初始容量(11)建立一個 PriorityQueue
,並根據其自然順序對元素進行排序。
          建立包含指定 collection 中元素的 PriorityQueue
(int initialCapacity)           使用指定的初始容量建立一個 PriorityQueue,並根據其自然順序對元素進行排序。
(int initialCapacity, Comparator<? super E> comparator)           使用指定的初始容量建立一個 PriorityQueue,並根據指定的比較器對元素進行排序。
          建立包含指定優先順序佇列元素的 PriorityQueue
          建立包含指定有序 set 元素的 PriorityQueue
方法摘要
 booleanadd(E e)           將指定的元素插入此優先順序佇列。
 voidclear()           從此優先順序佇列中移除所有元素。
          返回用來對此佇列中的元素進行排序的比較器;如果此佇列根據其元素的自然順序進行排序,則返回 null
 boolean           如果此佇列包含指定的元素,則返回 true
          返回在此佇列中的元素上進行迭代的迭代器。
 booleanoffer(E e)           將指定的元素插入此優先順序佇列。
 Epeek()           獲取但不移除此佇列的頭;如果此佇列為空,則返回 null
 Epoll()           獲取並移除此佇列的頭,如果此佇列為空,則返回 null
 boolean           從此佇列中移除指定元素的單個例項(如果存在)。
 intsize()           返回此 collection 中的元素數。
          返回一個包含此佇列所有元素的陣列。
<T> T[]
          返回一個包含此佇列所有元素的陣列;返回陣列的執行時型別是指定陣列的型別。
構造方法詳細資訊

PriorityQueue

public PriorityQueue()
使用預設的初始容量(11)建立一個 PriorityQueue,並根據其自然順序對元素進行排序。

PriorityQueue

public PriorityQueue(int initialCapacity)
使用指定的初始容量建立一個 PriorityQueue,並根據其自然順序對元素進行排序。
引數:
initialCapacity - 此優先順序佇列的初始容量
丟擲:

PriorityQueue

public PriorityQueue(int initialCapacity,
                     Comparator<? super E> comparator)
使用指定的初始容量建立一個 PriorityQueue,並根據指定的比較器對元素進行排序。
引數:
initialCapacity - 此優先順序佇列的初始容量
comparator - 用於對此優先順序佇列進行排序的比較器。如果該引數為 null,則將使用元素的自然順序
丟擲:

PriorityQueue

public PriorityQueue(Collection<? extends E> c)
建立包含指定 collection 中元素的 PriorityQueue。如果指定的 collection 是 SortedSet 的一個例項或者是另一個 PriorityQueue,那麼此優先順序佇列將根據相同順序進行排序。否則,此優先順序佇列將根據元素的自然順序進行排序。
引數:
c - collection,其元素要置於此優先順序佇列中
丟擲:
- 如果根據優先順序佇列的排序規則無法比較指定 collection 中的各個元素

PriorityQueue

public PriorityQueue(PriorityQueue<? extends E> c)
建立包含指定優先順序佇列元素的 PriorityQueue。此優先順序佇列將根據與給定優先順序佇列相同的順序進行排序。
引數:
c - 優先順序佇列,其元素要置於此優先順序佇列中
丟擲:

PriorityQueue

public PriorityQueue(SortedSet<? extends E> c)
建立包含指定有序 set 元素的 PriorityQueue。此優先順序佇列將根據與給定有序 set 相同的順序進行排序。
引數:
c - 有序 set,其元素將置於此優先順序佇列中
丟擲:
- 如果根據有序 set 的順序無法比較該有序 set 中的各個元素
方法詳細資訊

add

public boolean add(E e)
將指定的元素插入此優先順序佇列。
指定者:
指定者:
介面 Queue<E> 中的 add
覆蓋:

offer

public boolean offer(E e)
將指定的元素插入此優先順序佇列。
指定者:
介面 Queue<E> 中的 offer
引數:
e - 要新增的元素
返回:
丟擲:
- 如果根據優先順序佇列的順序無法將指定元素與此優先順序佇列中當前元素進行比較

peek

public E peek()
從介面 Queue 複製的描述
獲取但不移除此佇列的頭;如果此佇列為空,則返回 null
指定者:
介面 Queue<E> 中的 peek
返回:
此佇列的頭;如果此佇列為空,則返回 null

remove

public boolean remove(Object o)
從此佇列中移除指定元素的單個例項(如果存在)。更確切地講,如果此佇列包含一個或多個滿足 o.equals(e) 的元素 e,則移除一個這樣的元素。當且僅當此佇列包含指定的元素(或者此佇列由於呼叫而發生更改),則返回 true
引數:
o - 要從此佇列中移除的元素(如果存在)
返回:
如果此佇列由於呼叫而發生更改,則返回 true

contains

public boolean contains(Object o)
如果此佇列包含指定的元素,則返回 true。更確切地講,當且僅當此佇列至少包含一個滿足 o.equals(e) 的元素 e 時,才返回 true
引數:
o - 要檢查是否包含於此佇列的物件
返回:
如果此佇列包含指定元素,則返回 true

toArray

public Object[] toArray()
返回一個包含此佇列所有元素的陣列。陣列元素沒有特定的順序。

由於此佇列並不維護對返回陣列的任何引用,因而它將是“安全的”。(換句話說,此方法必須分配一個新陣列)。因此,呼叫者可以隨意修改返回的陣列。

此方法充當基於陣列的 API 與基於 collection 的 API 之間的橋樑。

返回:
包含此佇列所有元素的陣列

toArray

public <T> T[] toArray(T[] a)
返回一個包含此佇列所有元素的陣列;返回陣列的執行時型別是指定陣列的型別。返回陣列的元素沒有特定的順序。如果指定的陣列能容納佇列,則將該佇列返回此處。否則,將根據指定陣列的執行時型別和此佇列的大小分配一個新陣列。

如果指定陣列能容納佇列,且有剩餘空間(即陣列比佇列元素多),則緊跟在 collection 末尾的陣列元素將被設定為 null

toArray() 方法一樣,此方法充當基於陣列 的 API 與基於 collection 的 API 之間的橋樑。進一步說,此方法允許對輸出陣列的執行時型別進行精確控制,在某些情況下,可以用來節省分配開銷。

假定 x 是隻包含字串的一個已知佇列。以下程式碼可以用來將該佇列轉儲到一個新分配的 String 陣列:

     String[] y = x.toArray(new String[0]);
注意,toArray(new Object[0])toArray() 在功能上是相同的。
引數:
a - 儲存此佇列元素的陣列(如果該陣列足夠大);否則,將為此分配一個具有相同執行時型別的新陣列。
返回:
包含此佇列所有元素的陣列
丟擲:
如果指定陣列的執行時型別不是此佇列每個元素的執行時型別的子型別

iterator

public Iterator<E> iterator()

size

public int size()
返回此 collection 中的元素數。如果此 collection 包含的元素大於 Integer.MAX_VALUE,則返回 Integer.MAX_VALUE
返回:
此 collection 中的元素數

clear

public void clear()
從此優先順序佇列中移除所有元素。此呼叫返回後佇列為空。

poll

public E poll()
從介面 Queue 複製的描述
獲取並移除此佇列的頭,如果此佇列為空,則返回 null
指定者:
介面 Queue<E> 中的 poll
返回:
佇列的頭,如果此佇列為空,則返回 null

comparator

public Comparator<? super E> comparator()
返回用來對此佇列中的元素進行排序的比較器;如果此佇列根據其元素的自然順序進行排序,則返回 null
返回:
用於對此佇列進行排序的比較器;如果此佇列根據其元素的自然順序進行排序,則返回 null