Priority Queue是優先順序隊列,也是我們平時說的堆,可以實現O(1)擷取最大/最小元素,維護操作時間複雜度O(logN)
常用API,具體參見PriorityQueue:
| 構造方法摘要 |
PriorityQueue() 使用預設的初始容量(11)建立一個 PriorityQueue,並根據其自然順序對元素進行排序。 |
PriorityQueue(Collection<? extends E> c) 建立包含指定 collection 中元素的 PriorityQueue。 |
PriorityQueue(int initialCapacity) 使用指定的初始容量建立一個 PriorityQueue,並根據其自然順序對元素進行排序。 |
PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 使用指定的初始容量建立一個 PriorityQueue,並根據指定的比較子對元素進行排序。 |
PriorityQueue(PriorityQueue<? extends E> c) 建立包含指定優先順序隊列元素的 PriorityQueue。 |
PriorityQueue(SortedSet<? extends E> c) 建立包含指定有序 set 元素的 PriorityQueue。 |
| 方法摘要 |
boolean |
add(E e) 將指定的元素插入此優先順序隊列。 |
void |
clear() 從此優先順序隊列中移除所有元素。 |
Comparator<? super E> |
comparator() 返回用來對此隊列中的元素進行排序的比較子;如果此隊列根據其元素的自然順序進行排序,則返回 null。 |
boolean |
contains(Object o) 如果此隊列包含指定的元素,則返回 true。 |
Iterator<E> |
iterator() 返回在此隊列中的元素上進行迭代的迭代器。 |
boolean |
offer(E e) 將指定的元素插入此優先順序隊列。 |
E |
peek() 擷取但不移除此隊列的頭;如果此隊列為空白,則返回 null。 |
E |
poll() 擷取並移除此隊列的頭,如果此隊列為空白,則返回 null。 |
boolean |
remove(Object o) 從此隊列中移除指定元素的單個執行個體(如果存在)。 |
int |
size() 返回此 collection 中的元素數。 |
Object[] |
toArray() 返回一個包含此隊列所有元素的數組。 |
|
toArray(T[] a) 返回一個包含此隊列所有元素的數組;返回數組的運行時類型是指定數組的類型。 |
我們在使用時經常使用最大堆或者最小堆。PriorityQueue預設是最小堆,如果需要使用最大堆,需要重寫Comparator對象的compare函數,例子如下:
Comparator<Integer> cmp;cmp = new Comparator<Integer>() {public int compare(Integer e1, Integer e2) {return e2 - e1;}};Queue<Integer> q2 = new PriorityQueue<Integer>(5,cmp);