Java集合ソース分析のQueue(一):スーパーインタフェースQueue

6105 ワード

日常生活の中で、行列はほとんど随所に見られ、地下鉄に乗るには行列ができ、汽車の切符を買うには行列ができ、食事に出かけるにも行列ができます..前に検討したArrayList管理が乏しいキューシステムのようです.みんなは行列ができますが、一人で歩いて、みんなは前に移動して、一人で挿入して、みんなは後ろに移動して、このような行列に出会って、きっと人を苦しめますか?
今日ご紹介するQueue違いますが、厳格な行列システムです.多くの駅の並んでいる窓口が両側にガードレールをつけているように、みんなは列の尾から入って、列の頭から離れるしかありません.私たちはFIFO(first in first out)と呼ばれています.つまり、先に入った人が先に離れます.Queueこの原則に厳格に従い、割り込みや早期離脱を不可能にした.
もちろんQueue変種も多いがFIFOそれに従う唯一のルールではない.例えばStack(桟)は、LIFO(last in first out)に従います.これは私たちが茶碗を畳むように、後から来る者が上にいます.また、私たちが後で分析するDeque要素を両端から挿入または削除することができます.例えば、列に並んで駅に入ると、「列を挿入してもいいですか.急いでいますか」と言う人がいます.
スーパーインタフェースQueue
キューはソフトウェア開発において重要な役割を果たし,java関数の呼び出しはスタックの技術を用い,同時問題を処理する際にBlockingQueueデータ伝送の問題をうまく解決した.次にJavaがキューをどのように定義しているかを見てみましょう.
まず、QueueCollectionから継承し、集合家族の一員であることを説明する.Queueインタフェースは主に以下の方法を提供している:
//       
boolean add(E e);

//       , add  ,            
boolean offer(E e);

//        ,         
E remove();

//        ,       null
E poll();

//      ,    ,         
E element();

//      ,    ,       null
E peek();

スーパーインプリメンテーションクラスAbstractQueueQueueの定義は簡単なので、現クラスも簡単で、簡単なコードで複雑なことをするのは、私たちが学ぶ価値があります.AbstractQueue実現のみaddremoveelementの3つの方法があり、それぞれ別のわずかな違いの方法が呼び出されているが、ここではその1つのみを見る
//       ,        ,    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;
}



  :https://www.jianshu.com/p/41752e1a0978