隊列(一):Queue

在日常生活中吞歼,排隊幾乎隨處可見,上地鐵要排隊塔猾,買火車票要排隊篙骡,就連出門吃個大餐,也要排隊丈甸。糯俗。。之前研究的ArrayList就像是一個缺乏管理的排隊系統(tǒng)睦擂。大家雖然會排隊得湘,但一會走個人,大家向前挪一挪顿仇,一會插個人淘正,大家向后挪一挪,碰到這樣的隊伍臼闻,一定讓人痛苦萬分吧鸿吆?

今天要介紹的Queue就不同了,它是一個嚴(yán)格的排隊系統(tǒng)述呐。就像許多火車站排隊窗口在兩側(cè)加了護(hù)欄一樣伞剑,大家只能從隊尾進(jìn)來,從隊首離開市埋,我們稱之為FIFO(first in first out)黎泣,也就是先進(jìn)來的人先離開。Queue就嚴(yán)格遵循了這個原則缤谎,使插隊和提早離開變得不可能抒倚。

當(dāng)然Queue也有很多變種,FIFO并不是其可以遵循的唯一規(guī)則坷澡。比如Stack(棧)托呕,就遵循LIFO(last in first out),這就好比我們疊碗一樣频敛,后來者居上项郊。還有我們之后要分析的Deque,其允許元素從兩端插入或刪除斟赚,比如排隊進(jìn)站時總有人說着降,“我能不能插個隊,我趕時間拗军?”任洞。

超級接口Queue

隊列在軟件開發(fā)中擔(dān)任著重要的職責(zé)蓄喇,java函數(shù)的調(diào)用用到了棧的技術(shù),在處理并發(fā)問題時交掏,BlockingQueue很好的解決了數(shù)據(jù)傳輸?shù)膯栴}妆偏。接下來我們看看Java是如何定義隊列的吧。

首先盅弛,Queue也繼承自Collection钱骂,說明它是集合家族的一員。Queue接口主要提供了以下方法:

//將元素插入隊列
boolean add(E e);

//將元素插入隊列挪鹏,與add相比罐柳,在容量受限時應(yīng)該使用這個
boolean offer(E e);

//將隊首的元素刪除,隊列為空則拋出異常
E remove();

//將隊首的元素刪除狰住,隊列為空則返回null
E poll();

//獲取隊首元素张吉,但不移除,隊列為空則拋出異常
E element();

//獲取隊首元素催植,但不移除肮蛹,隊列為空則返回null
E peek();

超級實(shí)現(xiàn)類AbstractQueue

Queue的定義很簡單,所以其實(shí)現(xiàn)類也很簡單创南,用簡單的代碼做復(fù)雜的事情伦忠,值得我們學(xué)習(xí)。

AbstractQueue僅實(shí)現(xiàn)了add稿辙、removeelement三個方法昆码,并且分別調(diào)用了另外一個僅細(xì)微區(qū)別的方法,我們這里只看其一

//這里我們就明白邻储,對于有容量限制的赋咽,直接調(diào)用offer肯定會更快
public boolean add(E e) {
    if (offer(e))
        return true;
    else
        throw new IllegalStateException("Queue full");
}

此外,它還實(shí)現(xiàn)了clearaddAll方法吨娜,重寫這些方法可以使其更符合當(dāng)前場景脓匿。

public void clear() {
    while (poll() != null)
        ;
}

public boolean addAll(Collection<? extends E> c) {
    if (c == null)
        throw new NullPointerException();
    if (c == this)
        throw new IllegalArgumentException();
    boolean modified = false;
    for (E e : c)
        if (add(e))
            modified = true;
    return modified;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宦赠,隨后出現(xiàn)的幾起案子陪毡,更是在濱河造成了極大的恐慌,老刑警劉巖勾扭,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毡琉,死亡現(xiàn)場離奇詭異,居然都是意外死亡妙色,警方通過查閱死者的電腦和手機(jī)桅滋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來燎斩,“玉大人虱歪,你說我怎么就攤上這事≌け恚” “怎么了笋鄙?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長怪瓶。 經(jīng)常有香客問我萧落,道長叠蝇,這世上最難降的妖魔是什么狞贱? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任剑鞍,我火速辦了婚禮慨灭,結(jié)果婚禮上谢床,老公的妹妹穿的比我還像新娘烦味。我一直安慰自己礁鲁,他們只是感情好箍铭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布绎晃。 她就那樣靜靜地躺著蜜唾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庶艾。 梳的紋絲不亂的頭發(fā)上袁余,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機(jī)與錄音咱揍,去河邊找鬼颖榜。 笑死,一個胖子當(dāng)著我的面吹牛煤裙,可吹牛的內(nèi)容都是我干的掩完。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼硼砰,長吁一口氣:“原來是場噩夢啊……” “哼藤为!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起夺刑,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤缅疟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后遍愿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體存淫,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年沼填,在試婚紗的時候發(fā)現(xiàn)自己被綠了桅咆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡坞笙,死狀恐怖岩饼,靈堂內(nèi)的尸體忽然破棺而出荚虚,到底是詐尸還是另有隱情,我是刑警寧澤籍茧,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布版述,位于F島的核電站,受9級特大地震影響寞冯,放射性物質(zhì)發(fā)生泄漏渴析。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一吮龄、第九天 我趴在偏房一處隱蔽的房頂上張望俭茧。 院中可真熱鬧,春花似錦漓帚、人聲如沸母债。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽场斑。三九已至,卻和暖如春牵署,著一層夾襖步出監(jiān)牢的瞬間漏隐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工奴迅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留青责,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓取具,卻偏偏與公主長得像脖隶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子暇检,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

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