logo

ArrayList と LinkedList の違い

ArrayList と LinkedList は両方とも List インターフェイスを実装し、挿入順序を維持します。どちらも非同期クラスです。

Javaのスライス

ただし、ArrayList クラスと LinkedList クラスの間には、以下に示す多くの違いがあります。

配列リストリンクリスト
1) ArrayList は内部的に 動的配列 要素を保存します。LinkedList は内部的に 二重リンクリスト 要素を保存します。
2) ArrayList による操作は 遅い 内部的に配列を使用しているためです。いずれかの要素が配列から削除されると、他のすべての要素がメモリ内でシフトされます。LinkedList による操作は、 もっと早く ArrayList よりも二重リンク リストが使用されるため、メモリ内でのビット シフトが必要ありません。
3) ArrayList クラスは次のことができます。 リストとして機能する List のみを実装しているためです。LinkedList クラスでは、 リストとキューとして機能する どちらも List インターフェイスと Deque インターフェイスを実装しているためです。
4) ArrayList は 保存とアクセスに優れています データ。リンクリストは 操作に適した データ。
5) ArrayList の要素のメモリ位置は連続しています。リンクされたリストの要素の場所は伝染しません。
6) 一般に、ArrayList が初期化されると、デフォルトの容量 10 が ArrayList に割り当てられます。LinkedList にはデフォルトの容量が存在することはありません。 LinkedList では、LinkedList が初期化されるときに空のリストが作成されます。
7) 正確に言うと、ArrayList はサイズ変更可能な配列です。LinkedList は、リスト インターフェイスの二重リンク リストを実装します。

Java での ArrayList と LinkedList の例

ArrayList と LinkedList の両方を使用する簡単な例を見てみましょう。

ファイル名: TestArrayLinked.java

 import java.util.*; class TestArrayLinked{ public static void main(String args[]){ List al=new ArrayList();//creating arraylist al.add('Ravi');//adding object in arraylist al.add('Vijay'); al.add('Ravi'); al.add('Ajay'); List al2=new LinkedList();//creating linkedlist al2.add('James');//adding object in linkedlist al2.add('Serena'); al2.add('Swati'); al2.add('Junaid'); System.out.println('arraylist: '+al); System.out.println('linkedlist: '+al2); } } 
今すぐテストしてください

出力:

arraylist: [Ravi,Vijay,Ravi,Ajay] linkedlist: [James,Serena,Swati,Junaid] 

留意事項

ArrayList と LinkedList に関して覚えておくべき重要な点を次に示します。

  • 追加率または削除率が読み取りシナリオを超える場合は、LinkedList を使用します。一方、シナリオの読み込み頻度が追加または削除の頻度を超える場合、ArrayList が LinkedList より優先されます。
  • ArrayList の要素は LinkedList と比較してよりコンパクトに格納されるため、したがって、ArrayList は LinkedList に比べてキャッシュに適しています。したがって、LinkedList と比較して ArrayList ではキャッシュ ミスの可能性が低くなります。一般に、LinkedListはキャッシュ局所性に乏しいと考えられている。
  • LinkedList のメモリ オーバーヘッドは ArrayList に比べて大きくなります。これは、LinkedList には、前後のノードのアドレスを保存する必要があるため、2 つの追加リンク (次と前) があり、これらのリンクが余分なスペースを消費するためです。このようなリンクは ArrayList には存在しません。