LinkedListの:(8)を学習Javaコレクション

I.概要

LinkedListのとArrayListのは、AS Listインタフェースを実現しているが、その内部データ構造は基本的に異なります。LinkedListのは、(名前で識別することができる)リストに基づいて実装され、それは、ArrayListをより効率的な運用を挿入し、削除しますされています。しかし、それはリストに基づいて、そのArrayListの差よりもランダムアクセスの効率化されてもいるので。

LinkedListのクラスの定義を見てください:

パブリック クラスのLinkedList <E>は
     延び AbstractSequentialListを<E>の
     実装一覧<E>のDeque <E> 、Cloneableを、java.io.Serializableの
{}

LinkedListのは、AbstractSequenceListから継承リスト、のDeque、Cloneableを、java.io.Serializableインタフェースを実装しています。AbstractSequenceList Listインタフェースは、実装の複雑リストインターフェースを低減するために、バックボーンの実装を提供する、のDequeインタフェースは、操作両端キューを定義します。

独自のLinkedListのに加えて、この方法はまた、スタック、キュー、または両端キューとして機能するように、いくつかのメソッドを提供します。これらの名前は、特定の環境で、より適切なように見えるように、これらの方法は、名前だけ互いに異なっていてもよいです。

LinkedListは<文字列>リスト= 新しい LinkedListは<文字列> (); 
list.add( "语文:1" ); 
list.add( "数学:2" ); 
list.add( "英语:3");

以下に示すような構造は、比較的簡単です。

 

 

 

第二に、データ構造

LinkedListのリスト構造は、それがクラスの二つのポインタ(ノード)を含む最初と最後に基づいて実装されています。ノードノードは、このように、双方向リンクリストを構成し、次のノードへの参照を含むと。各ノードは前のノードとノードの後に​​知ることができますが、リストのために、これで十分です。

過渡 int型のサイズ= 0 ;
 過渡ノード<E>まず; // の先頭ポインタリスト
過渡ノード<E>最終; // テールポインタ
 // 保存された構造ノードオブジェクト、LinkedListの内部クラス
プライベート 静的 クラスノード<E> { 
    項目E、
    ノード <E>次; //は、次のノードを指すように 
    ノード<E> PREVを; // 上のノード点 
    のノード(ノード<E> PREV、E要素、ノード<E> 次){
         この .Item = エレメント;
         この .next = 次に、
         この .prev = PREV; 
    }
}

 

第三に、ストレージ

3.1アドオン(E電子)

この方法は、それは、独自の方法linkLast(E eを)呼び出して、リストの末尾に要素を追加することです。

まず、その要素Eに追加される新しいnewNode、に従って、新しいノード(L)へのノードの基準点の最後に、L;次に、我々はnewNodeに最後の点をしましょう。次のリスト自体のメンテナンスがあります。

 

/ ** 
     *このリストの最後に、指定された要素を追加します。
     * 
     * <p>この方法は{に相当する@link #addLast}。
     * 
     * @paramの電子要素は、このリストに追加される
     * @return { @code 真}({によって指定さ@link コレクション#アドイン})
      * / 
パブリック ブール追加(E電子){ 
    linkLast(E); 
    返す ; 
} 
/ ** 
*最後の要素として、電子をリンクします。
* / 
ボイドlinkLast(E、E){
     最終ノード<E> L = 最後;
    最終ノード<E> newNode = 新しいノード<>(L、E、NULL ); 
    最後 = newNode;
    もし(L == NULL 
        最初 = newNode。
    
        l.next = newNode; 
    サイズ ++ ; 
    modCount ++ ; 
}

3.2(int型のインデックス、Eの要素)を追加

このメソッドは、指定された場所のインデックスに要素を挿入することです。挿入方法さもなければコールlinkBefore(要素、ノード(インデックス));位置指標正確に等しいサイズ場合、linkLast端部に挿入される(要素)と呼ばれます。

/ ** 
    *このリスト内の指定された位置に指定された要素を挿入します。
    *その位置(もしあれば)、および任意で、現在の要素をシフトし
    、右に*後続の要素(インデックス値に1を加算)。
    * 
    * @paramの指定された要素が挿入されるインデックスindex 
    * @paramの要素素子が挿入される
    *は@throws はIndexOutOfBoundsException { @inheritDoc }
     * / 
   公共 ボイド追加(int型のインデックス、E要素){ 
       checkPositionIndex(インデックス)。
       もし(インデックス== サイズ)
           linkLast(要素)
       
           linkBefore(要素、ノード(インデックス))。
   } 
   / ** 
        * null以外のノードSUCCの前に挿入要素e。
        * / 
       無効 linkBefore(E E、ノード<E> のsucc){
            // アサートのsucc = nullを!; 
           最終ノード<E> PRED = succ.prev。
           最終ノード<E> newNode = 新しいノード<> (predは、例えば、SUCC)。
           succ.prev = newNode;
           もし(predは== NULL 
               最初 = newNode。
           
               pred.next= newNode。
           サイズ ++ ; 
           modCount ++ ; 
       }

 

延期する機会を持ってLinkedListは、多くの方法があります。

 

 

 

 参考と勧告:

1 https://www.cnblogs.com/skywang12345/p/3308807.html

 

おすすめ

転載: www.cnblogs.com/lisen10/p/10948568.html