java集合——佇列和雙端佇列+優先順序佇列
【0】README
【1】雙端佇列:可以讓人們有效地在頭部和尾部同時新增和刪除元素。
1.0) Deque API are as follows :
- java.util.Interface Deque
Type Parameters:
E - the type of elements held in this collection - All Superinterfaces:
Collection, Iterable, Queue - All Known Subinterfaces:
BlockingDeque - All Known Implementing Classes:
ArrayDeque, ConcurrentLinkedDeque, LinkedBlockingDeque, LinkedList
1.1)在java SE6中, 引入了 Deque介面, 並由 ArrayDeque 和 LinkedList 類實現。 這兩個類提供了雙端佇列, 而且在必要的時候增加佇列長度;
API java.util.Queue 5.0
boolean add(E element)
boolean offer(E element)
如果佇列沒有滿, 將給定 的元素新增到這個雙端佇列的尾部並返回 true。 如果佇列滿了,第一個方法將丟擲一個 IllegalStateException, 而第二個方法返回 false;E remove() + E poll()
假如佇列不為空, 刪除並返回這個佇列頭部的元素。如果佇列為空,第一個方法丟擲 NoSuchElementException, 而第二個方法返回 null;E element() + E peek()
如果佇列不為空, 返回這個佇列頭部的元素, 但不刪除。如果隊裡為空, 第一個方法將丟擲一個 NoSuchElementException , 而第二個方法返回 null;
(注意到, 以上方法中的第一個方法總是丟擲異常, 而第二個方法返回null 或者 false)API java.util.Deque 6
void addFirst(E e)
void addLast(E e)
//以上兩個方法出錯,拋異常;
boolean offerFirst(E e)
boolean offerLast(E e)
//以上兩個方法出錯,return false;
將給定的物件新增到 雙端佇列的頭部和尾部。 如果佇列滿了, 前兩個方法將丟擲一個 IllegalStateException, 而後面兩個方法返回 false;E removeFirst()
E removeLast()
//以上兩個方法出錯,拋異常;
E pollFirst()
E pollLast()
//以上兩個方法出錯,return null;
如果佇列不為空, 刪除並返回佇列頭部的元素;如果佇列為空, 前面兩個方法將丟擲一個 NoSuchElementException, 而後面兩個方法返回 null;E getFirst()
E getLast()
//以上兩個方法出錯,拋異常;
E peekFirst()
E peekLast()
//以上兩個方法出錯,return null;
如果佇列不為空, 返回佇列頭部的元素但不刪除;如果佇列為空, 前面兩個方法將丟擲一個 NoSuchElementException, 而後面兩個方法返回 null;API java.util.ArrayDeque 6
ArrayDeque()
ArrayDeque(int intialCapacity)
用初始容量16或給定的初始容量構造一個無限雙端佇列;
【2】優先順序佇列
- java.util.Class PriorityQueue
- java.lang.Object
- java.util.AbstractCollection
- java.util.AbstractQueue
- java.util.PriorityQueue
- java.util.AbstractQueue
- Type Parameters:
E - the type of elements held in this collection - All Implemented Interfaces:
Serializable, Iterable, Collection, Queue
2.1)優先順序佇列中的元素可以按照任意順序插入, 卻總是按照排序的順序檢索;也就是說, 無論何時呼叫 remove方法, 總會獲得當前優先佇列中最小的元素;
- 2.1.1)優先佇列使用了一個高效的資料結構——堆。(詳見資料結構 的堆,大根堆和小根堆)
- 2.1.2)和TreeSet一樣, 一個優先佇列既可以儲存實現了 Comparable介面的類物件, 也可以儲存在構造器中提供比較器的物件;
- 2.1.3)優先順序佇列的典型應用是任務排程。 每一個任務有一個優先順序, 任務以隨機順序新增到佇列中。 每當啟動一個新的任務時, 都將優先順序最高 的任務從佇列中刪除;
2.2)看個荔枝:
API java.util.PriorityQueue 5.0
PriorityQueue()
PriorityQueue(int initialCapacity)
PriorityQueue(int initialCapacity, Comparator<? super E> c)
構造一個優先佇列, 並用指定 的比較器對元素進行排序;