ArrayListのとは対照的LINKLIST

この記事を簡単には、多くの場合、インタビューの中でポイントの知識に頼まれた、JavaでのArrayListとLinkedListの違いをまとめました。

ArrayListのとLinkedListの間の関係を初めて目には、のようなものです:

ArrayListのとLinkedListの関係図

あなたは継承システムから見ることができ、ArrayListのとLinkedListのは、コレクションインタフェースの実装クラスの一覧インタフェースの下にあります。それは双子のペアとして記述することができます。

しかし、基礎となるデータ構造は、LinkedListはArrayListのを結果とするので、根本的に異なる持っています。

ArrayListのとLinkedListの違い

  • ArrayListの:
        ArrayListには、に基づいて、動的配列データ構造。
        それは配列であるため、ArrayListの初期化時に、ある10の初期サイズ、時間の新しい要素を挿入し、容量が必要であるか否かを判断する、膨張工程である0.5倍容量は、拡張方法は使用することで複製配列を特定ので、オーバーヘッド;
        さらに、ArrayListのを行なう要素は、挿入、必要と挿入後のすべての要素移動する、前進位置を逆に複数の変位素子、コストより大きいが、必要、より信頼性の挿入位置、次いで、より小さいオーバーヘッド、及びもし挿入の端面には、変位される必要はありません。

  • LinkedListの:
        内部使用基づいてリストデータ構造を記憶することができる、単位としてLinkedListのクラスは3つの属性を有する内部記憶素子を有しており、素子自体が前後の二つの基準セルを格納するために使用され、さらに内部LinkedListの属性ヘッダ、開始位置を識別するために使用される、第一部及び最後部LinkedListのは、このように形成し、ヘッダをポイントする双方向リンクリスト構造。
        LinkedListのは、二重リンクリストを使用して実装されています。それはまた、すなわち高い効率を挿入し取り除くだけ一定時間を参照することによってノードと次のノードを見つけるために、アドレス(ノード)の各要素が不連続である、現在のノードのリンクリストの特性を有していますgetおよびセットは、より非効率的です。

リンクリストのLinkedListとほぼ同じのLinkedListとArrayListの方法および使用は、ArrayListの拡大の疑いがありません、それは追加の頭と尾の追加/削除要素法を提供し、実装されています。さらに、ArrayListのとLinkedListのスタックデータ構造は、キューを実装することができるが、LinkedListの自体がインタフェースを実装キュー、それがより推奨林で大カラム  ArrayListのLINKLISTと比較キューとスタックにkedList。

すべてのすべてでは、ArrayListのとLinkedListの違いは以下のとおりであります:
  •    ArrayListのデータ構造は動的配列、およびLinkedListのベースリンクリストデータ構造に基づいて実現されます。
  •    ランダムアクセス時間要素については、アレイ取得したデータの複雑さはO(1)ですが、データを削除するが、それは、配列内のすべてのデータを再配置する必要があるため、それは、多くのオーバーヘッドです。ArrayListにはしたい(int型のインデックス)を取得 LinkedListのは、など、検索方法に最適化されていますが、LinkedListのニーズは、forループを見つけることながら、要素、インデックスに直接バックの位置に要素をインデックス<サイズ/ 2の左から右へ、。右見てから逆に、検索、それでもArrayListに比べて遅いです。
  •    追加と削除操作が追加および削除するには、LinkedListのは高速です。LinkedListのArrayListのとは異なり、配列の大きさに変化を必要としないことは、アレイは、すべてのデータの完全であるとき、新しい配列をリロードする必要する必要はありませんので、これは最悪の場合のArrayListで、時間の複雑さがありますO(N)、およびLinkedListの時間複雑さの挿入や削除はO(1)です。
  •    (アレイに挿入尾を除いて)、インデックスデータを更新する必要の時に挿入のArrayList。あなたが要素を挿入または削除する指定した場所で、主に時間のかかるがあるArrayListのSystem.arraycopyのアクションは、インデックスの背後にあるすべての要素を移動します。LinkedListの最初のサイクルは、メインの時間がかかるため、インデックスを通じて見つけることですし、その後直接挿入または削除しました。2このリードは速い方が遅い人は限りません。

該当シーン

多くのシーンでは、より人気のArrayListです。しかし、いくつかのケースでそのように、より適切なLinkedListの:

  1. アプリケーションは、ランダムアクセスデータではないでしょう。あなたがのLinkedListのn個の要素が必要な場合は、時間なので、あなたがして、読み取りデータ、n番目のデータに最初からシーケンスの要素の数を必要とします。

  2. あなたのアプリケーションは、より多くのインサートがあり、削除要素が作動し、少ないデータを読み込みます。データの並べ替え伴わない挿入、削除要素は、それが速いのArrayListよりもされているため。

これらは、ArrayListのとLinkedListはに関して相違しています。あなたは、インデックス・ベースのデータ・アクセスの同期を必要としない、ArrayListのを使用してみてください。ArrayListを迅速、かつ非常に使いやすいです。しかし、初期サイズの適切なセットを与える可能な限り軽減するために、配列のサイズを変更することを忘れないでください。

おすすめ

転載: www.cnblogs.com/lijianming180/p/12099716.html