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

Deque

interface Deque <E>

子接口:

BlockingDeque <E>

實(shí)現(xiàn)類(lèi):

Deque

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

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

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

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

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

同時(shí)秋冰,Deque也可以作為L(zhǎng)IFO(后進(jìn)先出)堆棧,此接口優(yōu)于傳統(tǒng)的Stack類(lèi)使用仲义。

Stack和Deque方法的比較

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

與List接口不同,此接口不支持索引訪問(wèn)元素。

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

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

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

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

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

  • LinkedList 大小可變的鏈表雙端隊(duì)列,允許元素為插入null宾茂。
  • ArrayDeque 大下可變的數(shù)組雙端隊(duì)列瓷马,不允許插入null。
  • ConcurrentLinkedDeque 大小可變且線程安全的鏈表雙端隊(duì)列跨晴,非阻塞欧聘,不允許插入null。
  • LinkedBlockingDeque 為線程安全的雙端隊(duì)列端盆,在隊(duì)列為空的情況下树瞭,獲取操作將會(huì)阻塞,直到有元素添加爱谁。

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市访敌,隨后出現(xiàn)的幾起案子凉敲,更是在濱河造成了極大的恐慌,老刑警劉巖寺旺,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爷抓,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡阻塑,警方通過(guò)查閱死者的電腦和手機(jī)蓝撇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)陈莽,“玉大人渤昌,你說(shuō)我怎么就攤上這事虽抄。” “怎么了独柑?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵迈窟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我忌栅,道長(zhǎng)车酣,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任索绪,我火速辦了婚禮湖员,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瑞驱。我一直安慰自己破衔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布钱烟。 她就那樣靜靜地躺著晰筛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拴袭。 梳的紋絲不亂的頭發(fā)上读第,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音拥刻,去河邊找鬼怜瞒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛般哼,可吹牛的內(nèi)容都是我干的吴汪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蒸眠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼漾橙!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起楞卡,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤霜运,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蒋腮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體淘捡,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年池摧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了焦除。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡作彤,死狀恐怖膘魄,靈堂內(nèi)的尸體忽然破棺而出乌逐,到底是詐尸還是另有隱情,我是刑警寧澤瓣距,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布黔帕,位于F島的核電站代咸,受9級(jí)特大地震影響蹈丸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呐芥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一逻杖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧思瘟,春花似錦荸百、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至光绕,卻和暖如春女嘲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诞帐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工欣尼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人停蕉。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓愕鼓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親慧起。 傳聞我的和親對(duì)象是個(gè)殘疾皇子菇晃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

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