Queue

新元素插入到隊列的尾部,訪問元素操做會返回隊列頭部的元素,一般隊列不容許隨機訪問隊列中的元素數組

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也是以數組形式存儲,但實現了線程同步,因此各方面性能都差

相關文章
相關標籤/搜索