ArrayList vs LinkedList:それぞれの使い方と使い分けを理解しよう

この記事は約3分で読めます。
記事内に広告が含まれています。

Javaでリスト型のデータを扱う際に、ArrayListLinkedList は非常に重要なコレクションクラスです。どちらもListインターフェースを実装していますが、内部的な構造や特徴が異なるため、使い分けることが重要です。

ArrayListの特徴と使い方

  • 配列をベースとした実装: 内部的に配列を使用しており、ランダムアクセス(任意の要素へのアクセス)が高速です。
  • 要素の追加・削除: 特に中間の要素の追加・削除は、既存の要素をシフトする必要があるため、時間がかかります。
  • 用途:
    • ランダムアクセスが多い場合
    • 要素の追加・削除が頻繁に行われない場合
import java.util.ArrayList;

public class ArrayListExample {
    public static void main(String[] args) {
        ArrayList<String> names = new ArrayLi   st<>();
        names.add("太郎");
        names.add("次郎");
        // ...
        String name = names.get(1); // 2番目の要素を取得
    }
}

LinkedListの特徴と使い方

  • 双方向リンクリストの実装: 各要素が前後の要素を指し示すリンクを持つ構造です。
  • 要素の追加・削除: 特にリストの先頭や末尾への追加・削除が高速です。
  • 用途:
    • 要素の追加・削除が頻繁に行われる場合
    • ランダムアクセスはあまり行わない場合
import java.util.LinkedList;

public class LinkedListExample {
    public static void main(String[] args) {
        LinkedList<String> names = new LinkedList<>();
        nam   es.add("太郎");
        names.add("次郎");
        // ...
        String name = names.get(1); // 2番目の要素を取得
    }
}

ArrayListとLinkedListの比較

特徴ArrayListLinkedList
内部構造配列双方向リンクリスト
ランダムアクセス高速低速
要素の追加・削除 (先頭・末尾)低速高速
要素の追加・削除 (中間)低速高速
メモリ使用量比較的少ない比較的多め

どちらを使うべきか?

ArrayList

  • ランダムアクセスが多い場合(配列のようなアクセスパターン)
  • 要素の追加・削除が頻繁に行われない場合
  • メモリ効率を重視する場合

LinkedList

  • 要素の追加・削除が頻繁に行われる場合(特に先頭・末尾)
  • ランダムアクセスはあまり行わない場合
  • スタックやキューなどのデータ構造を実装する場合

まとめ

ArrayListとLinkedListは、それぞれ長所と短所を持っています。どちらを使うべきかは、アプリケーションの要件によって異なります。

  • ランダムアクセスを重視する場合はArrayList
  • 要素の追加・削除を重視する場合はLinkedList

具体的な例

  • ArrayList: 学生の成績管理(成績の参照が多い)、商品の在庫管理(在庫数の参照が多い)
  • LinkedList: 履歴管理(最新の履歴を先頭に追加)、チャットのメッセージ履歴

コメント

タイトルとURLをコピーしました