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