新元素插入到隊列的尾部,訪問元素操做會返回隊列頭部的元素,一般隊列不容許隨機訪問隊列中的元素數組
Queue接口定義的幾個方法:性能
void add(obj):將指定元素加入隊列尾部線程
Object element():獲取頭元素,但不刪除對象
boolean offer(obj):將指定元素加入隊列尾部,當使用有容量限制的隊列時,此方法表現的比add要好排序
Object peek():獲取頭元素,但不刪除該元素,隊列爲空則返回null接口
Object poll():獲取頭元素並刪除,若是隊列爲空澤返回null隊列
Object remove():獲取隊列頭部元素,並刪除該元素element
Queue接口有一個PriorityQueue實現類和一個Deque接口rem
Deque表明雙端隊列,能夠同時兩端添加刪除元素,既能夠當隊列使用,也能夠當棧使用。有兩個實現類:ArrayDeque,LinkedListget
PriorityQueue類:
是一個比較標準的隊列實現類,說比較標準是由於PriorityQueue保存隊列元素的順序不是按照加入隊列的順序,而是按照隊列元素的大小進行從新排序,所以當調用peek或者poll方法取出隊列中元素時,不是最早進入的元素,而是最小的元素,這裏違反了先進先出規則,大小比較受到PriorityQueue的toString方法影響。不容許插入null
有兩種排序方式:
天然排序:集合元素必須實現了Comparable接口
定製排序:建立PriorityQueue隊列時,傳入一個Comparator對象
對元素的要求與TreeSet基本一致
Deque接口:
表明雙端隊列,包含下面方法:
void addFirst(obj):指定元素插入開頭
void addLast(obj):插入結尾
Iterator descendingIterator():返回雙端隊列對應迭代器,該迭代器逆向順序迭代隊列中的元素
Object getFirst():獲取但不刪除第一個
Object getLast():獲取但不刪除最後一個
boolean offerFirst(obj):插入開頭
boolean offerLast(obj):插入末尾
Object peekFirst():獲取但不刪除第一個元素,若是隊列爲空則null
Object peekLast():獲取但不刪除最後一個元素,若是隊列爲空則null
Object pollFirst():獲取並刪除第一個元素,若是隊列爲空則null
Object pollLast():獲取並刪除最後一個元素,若是隊列爲空則null
Object pop():(棧方法)pop出棧頂元素,至關於removeFirst
void push(obj):(棧方法)push到棧頂,至關於addFirst
Object removeFirst():獲取並刪除雙端隊列第一個元素
boolean removeFirstOccurrence(obj):刪除雙端隊列第一次出現的元素
Object removeLast():獲取並刪除雙端隊列最後一個元素
boolean removeLastOccurrence(obj):刪除該雙端隊列最後一次出現的元素
ArrayDeque實現類:
是Deque的實現類,基於數組實現的雙端隊列
建立Deque一樣能夠指定一個numElements參數,用於指定Object[]數組的長度,不指定則Deque底層數組長度爲16
用棧用ArrayDeque,避免用Stack,也能夠當作隊列使用:ArrayDeque stack = new ArrayDeque()
ArrayList和ArrayDeque實現機制基本相同,底層都採用一個動態的,可分配的Object[]數組來存儲集合,超出容量則從新分配一個數組
LinkedList實現類:
是List接口的實現類,也實現了Deque接口,所以能夠當作雙端隊列使用,能夠當作隊列使用。也能夠當作棧使用
LinkedList與ArrayList和ArrayDeque實現機制徹底不一樣,後二者以數組形式保存集合中的元素,所以隨機訪問具備很好的性能,當LinkedList以鏈表形式,隨機訪問性能較差,插入刪除出色
Vector也是以數組形式存儲,但實現了線程同步,因此各方面性能都差