深入理解Java集合之---Deque

Deque

interface Deque <E>

子接口:

BlockingDeque <E>

實(shí)現(xiàn)類:

Deque

線性集合,支持兩端的元素插入和移除。Deque是double ended queue的簡稱,習(xí)慣上稱之為雙端隊列。大多數(shù)Deque 實(shí)現(xiàn)對它們可能包含的元素的數(shù)量沒有固定的限制,但是該接口支持容量限制的deques以及沒有固定大小限制的deque。

在大多數(shù)實(shí)現(xiàn)中,插入操作不會失敗。

發(fā)音為deck,千萬因?yàn)榘l(fā)音問題出丑哦。

Deque同時擴(kuò)展了Queue接口,當(dāng)Deque作為隊列的時候,會產(chǎn)生FIFO(先進(jìn)先出)行為。元素添加在雙端隊列的末尾并從頭開始刪除。

Queue 方法 等效Deque方法
add(e) addLast(e)
offer(e) offerLast(e)
remove() removeFirst()
poll() pollFirst()
element() getFirst()
peek() peekFirst()

同時,Deque也可以作為LIFO(后進(jìn)先出)堆棧,此接口優(yōu)于傳統(tǒng)的Stack類使用。

Stack和Deque方法的比較

棧方法 等效Deque方法
push(e) addFirst(e)
pop() removeFirst()
peek() peekFirst()

與List接口不同,此接口不支持索引訪問元素。

這個接口提供了兩種方法去除內(nèi)部元素,removeFirstOccurrence和removeLastOccurrence。

removeFirstOccurrence(Object o) removeLastOccurrence(Object o)
從此雙端隊列中移除指定元素的第一個匹配項(xiàng)。 從此雙端隊列中移除指定元素的最后一次出現(xiàn)。

雖然 Deque 實(shí)現(xiàn)沒有嚴(yán)格要求禁止插入 null 元素,但建議最好這樣做。建議任何事實(shí)上允許 null 元素的 Deque 實(shí)現(xiàn)用戶最好不 要利用插入 null 的功能。這是因?yàn)楦鞣N方法會將null 用作特殊的返回值來指示雙端隊列為空。

Deque 實(shí)現(xiàn)通常不定義基于元素的 equals 和 hashCode 方法,而是從 Object 類繼承基于身份的equals 和 hashCode 方法。

Deque的使用場景
在一般情況,不涉及到并發(fā)的情況下,有兩個實(shí)現(xiàn)類,可根據(jù)其自身的特性進(jìn)行選擇,分別是:

  • LinkedList 大小可變的鏈表雙端隊列,允許元素為插入null。
  • ArrayDeque 大下可變的數(shù)組雙端隊列,不允許插入null。
  • ConcurrentLinkedDeque 大小可變且線程安全的鏈表雙端隊列,非阻塞,不允許插入null。
  • LinkedBlockingDeque 為線程安全的雙端隊列,在隊列為空的情況下,獲取操作將會阻塞,直到有元素添加。

注意:LinkedList 和 ArrayDeque 是線程不安全的容器。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java集合類可用于存儲數(shù)量不等的對象,并可以實(shí)現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)如棧,隊列等,Java集合還可以用于保存具有映射關(guān)...
    小徐andorid閱讀 2,078評論 0 13
  • Java集合框架 Java中封裝了許多常用的數(shù)據(jù)結(jié)構(gòu),稱為集合框架,可以有效組織數(shù)據(jù),提高程序性能。最初Java只...
    Steven1997閱讀 1,097評論 0 2
  • 棧 棧的英文單詞是Stack,它代表一種特殊的線性表,這種線性表只能在固定一端(通常認(rèn)為是線性表的尾端)進(jìn)行插入,...
    Jack921閱讀 1,622評論 0 5
  • 一:基本概念 Java的所有集合都放在java.util包下,集合跟數(shù)組不同之處在于前者只能保存對象(對象的引...
    Febers閱讀 784評論 0 0
  • 清晨,獨(dú)自行走,耳畔響起: “春有百花秋有月,夏有涼風(fēng)冬有雪,若無閑事掛心頭,便是人間好時節(jié)。好來好往好聚首,春去...
    嶒經(jīng)哋嶒經(jīng)閱讀 611評論 0 0

友情鏈接更多精彩內(nèi)容