JAVA の基本 - ArrayList と LinkedList の違い

ArrayList と LinkedList はどちらも List インターフェイスを実装していますが、次のような違いがあります。

ArrayList はインデックスベースのデータ インターフェイスであり、その最下層は配列です。O(1) の時間計算量で要素へのランダム アクセスを実行できます。これに対応して、LinkedList はデータを二重リンク リストの形式で保存します。各要素は前後の要素にリンクされます。この場合、要素を見つける時間計算量は O( n) です。

ArrayList と比較して、LinkedList の挿入、追加、削除操作は高速です。これは、要素がコレクション内の任意の位置に追加されるときに、配列のようにサイズを再計算したりインデックスを更新したりする必要がないためです。LinkedList は、各ノードに対して 2 つの参照 (前の要素を指し、もう 1 つは次の要素を指す) を格納するため、ArrayList より多くのメモリを消費します。

  1. 配列はインデックスベースのデータ構造であるため、インデックスを使用して配列内のデータを非常に迅速に検索および読み取ります。配列からデータを取得する時間計算量は O(1) ですが、データの削除には配列内のすべてのデータを再配置する必要があるため、非常にコストがかかります。

  1. ArrayList と比較して、LinkedList の挿入は高速です。LinkedList は ArrayList とは異なるため、配列のサイズを変更する必要がなく、配列がいっぱいになったときにすべてのデータを新しい配列に再ロードする必要もありません。これは ArrayList の最悪のケースであり、時間の計算量が非常に多くなります。は O(n) ですが、LinkedList での挿入または削除の時間計算量はわずか O(1) です。ArrayList は、(配列の最後に挿入するだけでなく) データを挿入するときにインデックスも更新する必要があります。

  1. データの挿入と同様に、データを削除する場合も ArrayList より LinkedList の方が優れています。

  1. ArrayList の各インデックスの位置は実際のデータですが、LinkedList の各ノードには実際のデータと前後のノードの位置が格納されるため、LinkedList はより多くのメモリを必要とします (LinkedList インスタンスには 2 つの値が格納されます: Node <E> first と Node <E> last はそれぞれリンクされたリストの実ノードと末尾ノードを表し、各 Node インスタンスには 3 つの値 (E item、Node next、Node pre) が格納されます。

ArrayList の代わりに LinkedList を使用する方が適切なシナリオは何ですか?
  1. アプリケーションはデータにランダムにアクセスしません。LinkedList の n 番目の要素が必要な場合、最初の要素から n 番目のデータまで順番にカウントしてデータを読み取る必要があるためです。

  1. 要素の挿入と削除を増やし、読み取りデータを減らします。要素の挿入と削除にはデータの並べ替えが含まれないため、ArrayList よりも高速です。

つまり、ArrayList の実装は配列を使用し、LinkedList はリンク リストに基づいており、ArrayList は検索に適しており、LinkedList は追加と削除に適しています。非同期インデックスベースのデータ アクセスが必要な場合は、ArrayList を使用してみてください。ArrayList は高速で使いやすいです。ただし、適切な初期サイズを指定し、配列のサイズの変更は最小限にすることを忘れないでください。

おすすめ

転載: blog.csdn.net/DreamEhome/article/details/128812030