Java的LinkedList/Deque中add/offer/push,remove/pop/poll的區(qū)別

最近在使用LinkedList/Deque的時候,發(fā)現(xiàn)其中有很多類似的方法览绿,我就想簡簡單單做個添加/刪除的操作,發(fā)現(xiàn)竟然有那么多類似的方法穗慕,比如“添加”操作可以用的方法有:add/offer/push/offerFirst/offerLast饿敲,“刪除”操作可以用的方法有:remove/pop/poll/pollFirst/pollLast

經過一番學習和測試以后逛绵,得出以下結論:這些方法從設計之初怀各,分別來自于集合Collections,隊列Queue术浪,棧Stack瓢对,雙端隊列Deque,因此它們是有語義的胰苏,不建議籠統(tǒng)歸為添加/刪除硕蛹。

  • addremove是一對,源自Collection硕并;
  • offerpoll是一對法焰,源自Queue
  • pushpop是一對鲤孵,源自Deque壶栋,其本質是棧(Stack類由于某些歷史原因,官方已不建議使用普监,使用Deque代替)贵试;
  • offerFirst/offerLastpollFirst/pollLast是一對,源自Deque凯正,其本質是雙端隊列毙玻。

那為什么這些方法,全都出現(xiàn)在LinkedList/Deque中呢廊散,那是由它們的繼承關系導致的桑滩,請看下圖。

image.png

關注圈住的部分允睹,接口Deque繼承了以上所有的方法运准,而類LinkedList實現(xiàn)了以上所有的方法。
注:由于歷史原因缭受,在Java中胁澳,官方不建議使用Stack類,而是使用Deque代替米者,也就是說韭畸,接口Deque是棧和雙端隊列這兩種數(shù)據(jù)結構的集合體宇智。

說了這么多,這一堆方法到底有什么區(qū)別胰丁?其實從他們的出處便可以快速區(qū)分并且牢記他們的不同之處随橘。

  • add/remove源自集合,所以添加到隊尾锦庸,從隊頭刪除机蔗;
  • offer/poll源自隊列(先進先出 => 尾進頭出),所以添加到隊尾酸员,從隊頭刪除蜒车;
  • push/pop源自棧(先進后出 => 頭進頭出)讳嘱,所以添加到隊頭幔嗦,從隊頭刪除;
  • offerFirst/offerLast/pollFirst/pollLast源自雙端隊列(兩端都可以進也都可以出)沥潭,根據(jù)字面意思邀泉,offerFirst添加到隊頭,offerLast添加到隊尾钝鸽,pollFirst從隊頭刪除汇恤,pollLast從隊尾刪除。
    總結:
  • add/offer/offerLast添加隊尾拔恰,三個方法等價因谎;
  • push/offerFirst添加隊頭,兩個方法等價颜懊。
  • remove/pop/poll/pollFirst刪除隊頭财岔,四個方法等價;
  • pollLast刪除隊尾河爹。

雖說某幾個方法等價匠璧,但是我們在使用的時候,建議根據(jù)用途來使用不同的方法咸这,比如你想把LinkedList當做集合list夷恍,那么應該用add/remove,如果想用作隊列媳维,則使用offer/poll酿雪,如果用作棧,則使用push/pop侄刽,如果用作雙端隊列指黎,則使用offerFirst/offerLast/pollFirst/pollLast。根據(jù)語義使用唠梨,就不會發(fā)生:我想刪隊尾袋励,結果刪了隊頭這種事了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市茬故,隨后出現(xiàn)的幾起案子盖灸,更是在濱河造成了極大的恐慌,老刑警劉巖磺芭,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赁炎,死亡現(xiàn)場離奇詭異,居然都是意外死亡钾腺,警方通過查閱死者的電腦和手機徙垫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來放棒,“玉大人姻报,你說我怎么就攤上這事〖涿” “怎么了吴旋?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長厢破。 經常有香客問我荣瑟,道長,這世上最難降的妖魔是什么摩泪? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任笆焰,我火速辦了婚禮,結果婚禮上见坑,老公的妹妹穿的比我還像新娘嚷掠。我一直安慰自己,他們只是感情好鳄梅,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布叠国。 她就那樣靜靜地躺著,像睡著了一般戴尸。 火紅的嫁衣襯著肌膚如雪粟焊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天孙蒙,我揣著相機與錄音项棠,去河邊找鬼。 笑死挎峦,一個胖子當著我的面吹牛香追,可吹牛的內容都是我干的。 我是一名探鬼主播坦胶,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼透典,長吁一口氣:“原來是場噩夢啊……” “哼晴楔!你這毒婦竟也來了?” 一聲冷哼從身側響起峭咒,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤税弃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后凑队,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體则果,經...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年漩氨,在試婚紗的時候發(fā)現(xiàn)自己被綠了西壮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡叫惊,死狀恐怖款青,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情赋访,我是刑警寧澤可都,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站蚓耽,受9級特大地震影響,放射性物質發(fā)生泄漏旋炒。R本人自食惡果不足惜步悠,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瘫镇。 院中可真熱鬧鼎兽,春花似錦、人聲如沸铣除。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尚粘。三九已至择卦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間郎嫁,已是汗流浹背秉继。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泽铛,地道東北人尚辑。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像盔腔,于是被迫代替她去往敵國和親杠茬。 傳聞我的和親對象是個殘疾皇子月褥,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內容