Java集合源碼分析之Queue(一):超級接口Queue_一點課堂(多岸學院)

在平常生活中,排隊幾乎隨處可見,上地鐵要排隊,買火車票要排隊,就連出門吃個大餐,也要排隊。。。以前研究的ArrayList就像是一個缺少管理的排隊系統。你們雖然會排隊,但一會走我的,你們向前挪一挪,一會插我的,你們向後挪一挪,碰到這樣的隊伍,必定讓人痛苦萬分吧?java

今天要介紹的Queue就不一樣了,它是一個嚴格的排隊系統。就像許多火車站排隊窗口在兩側加了護欄同樣,你們只能從隊尾進來,從隊首離開,咱們稱之爲FIFO(first in first out),也就是先進來的人先離開。Queue就嚴格遵循了這個原則,使插隊和提前離開變得不可能。併發

固然Queue也有不少變種,FIFO並非其能夠遵循的惟一規則。好比Stack(棧),就遵循LIFO(last in first out),這就比如咱們疊碗同樣,後來者居上。還有咱們以後要分析的Deque,其容許元素從兩端插入或刪除,好比排隊進站時總有人說,「我能不能插個隊,我趕時間?」。函數

超級接口Queue

隊列在軟件開發中擔任着重要的職責,java函數的調用用到了棧的技術,在處理併發問題時,BlockingQueue很好的解決了數據傳輸的問題。接下來咱們看看Java是如何定義隊列的吧。學習

首先,Queue也繼承自Collection,說明它是集合家族的一員。Queue接口主要提供瞭如下方法:this

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

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

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

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

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

//獲取隊首元素,但不移除,隊列爲空則返回null
E peek();

超級實現類AbstractQueue

Queue的定義很簡單,因此其實現類也很簡單,用簡單的代碼作複雜的事情,值得咱們學習。code

AbstractQueue僅實現了addremoveelement三個方法,而且分別調用了另一個僅細微區別的方法,咱們這裏只看其一blog

//這裏咱們就明白,對於有容量限制的,直接調用offer確定會更快
public boolean add(E e) {
    if (offer(e))
        return true;
    else
        throw new IllegalStateException("Queue full");
}

此外,它還實現了clearaddAll方法,重寫這些方法可使其更符合當前場景。繼承

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;
}

【感謝您能看完,若是可以幫到您,麻煩點個贊~】接口

更多經驗技術歡迎前來共同窗習交流: 一點課堂-爲夢想而奮鬥的在線學習平臺 http://www.yidiankt.com/隊列

![關注公衆號,回覆「1」免費領取-【java核心知識點】] file

QQ討論羣:616683098

QQ:3184402434

想要深刻學習的同窗們能夠加我QQ一塊兒學習討論~還有全套資源分享,經驗探討,等你哦! 在這裏插入圖片描述

相關文章
相關標籤/搜索