Java での ArrayList と LinkedList の違い

Mohammad Irfan 2023年10月12日
  1. Java での ArrayList の例
  2. Java での LinkedList の例
Java での ArrayList と LinkedList の違い

このチュートリアルでは、Java で char を初期化する方法と char 型の初期値を紹介します。

Java では、ArrayList と LinkedList はどちらも List インターフェースを実装するクラスです。ArrayList は List インターフェースのサイズ変更可能な配列実装ですが、LinkedList は Java の List インターフェースの二重リンクリスト実装です。

ArrayList と LinkedList はどちらもデータの格納に使用されますが、実装タイプによっていくつかの違いがあります。この記事では、これらの主な違いを例を挙げて説明します。

操作方法 配列リスト LinkedList
要素の追加 もっと時間がかかる 時間がかからない
要素へのアクセス 時間がかからない もっと時間がかかる
要素の削除 もっと時間がかかる 時間がかからない
要素の反復 時間がかからない もっと時間がかかる
検索要素 時間がかからない もっと時間がかかる
  • LinkedList のパフォーマンスの問題

キャッシュの局所性に悪影響を及ぼし、プロセス全体でパフォーマンスの問題を引き起こす小さなメモリオブジェクトを多数使用します。

LinkedList は要素の追加と削除には高速ですが、特定の要素にアクセスする場合は非常に低速です。対照的に、ArrayList は特定の要素にアクセスするのに高速ですが、要素を追加すると低速になり、途中から要素を削除すると非常に低速になります。

Java での ArrayList の例

この例では、ArrayList を作成し、要素の追加、削除、アクセスなどのいくつかの操作を適用しました。ArrayList と LinkedList のパフォーマンスの違いを理解できるように、操作の実行中に時間を測定します。以下の例を参照してください。

import java.util.ArrayList;
import java.util.List;

public class SimpleTesting {
  public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    System.out.println("Adding Time : " + addElement(list, 10));
    System.out.println("Adding Time : " + addElement(list, 2));
    System.out.println(list);
    System.out.println("Accessing Time : " + accessElement(list, 1));
    System.out.println("Removing Time : " + removeElement(list, 1));
    System.out.println(list);
  }
  static long addElement(List<Integer> list, int element) {
    long starttime = System.nanoTime();
    list.add(element);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
  static long accessElement(List<Integer> list, int index) {
    long starttime = System.nanoTime();
    int el = list.get(index);
    System.out.println("Element found : " + el);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
  static long removeElement(List<Integer> list, int index) {
    long starttime = System.nanoTime();
    list.remove(index);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
}

出力:

Adding Time : 48556
Adding Time : 2090
[10, 2]
Element found : 2
Accessing Time : 42301
Removing Time : 6471
[10]

Java での LinkedList の例

この例では、LinkedList を作成し、要素の追加、削除、アクセスなどのいくつかの操作を適用しました。ArrayList と LinkedList のパフォーマンスの違いを理解できるように、操作の実行中に時間も測定します。以下の例を参照してください。

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class SimpleTesting {
  public static void main(String[] args) {
    List<Integer> list = new LinkedList<Integer>();
    System.out.println("Adding Time : " + addElement(list, 10));
    System.out.println("Adding Time : " + addElement(list, 2));
    System.out.println(list);
    System.out.println("Accessing Time : " + accessElement(list, 1));
    System.out.println("Removing Time : " + removeElement(list, 1));
    System.out.println(list);
  }
  static long addElement(List<Integer> list, int element) {
    long starttime = System.nanoTime();
    list.add(element);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
  static long accessElement(List<Integer> list, int index) {
    long starttime = System.nanoTime();
    int el = list.get(index);
    System.out.println("Element found : " + el);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
  static long removeElement(List<Integer> list, int index) {
    long starttime = System.nanoTime();
    list.remove(index);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
}

出力:

Adding Time : 82591
Adding Time : 4218
[10, 2]
Element found : 2
Accessing Time : 54516
Removing Time : 7572
[10]

関連記事 - Java ArrayList

関連記事 - Java LinkedList