【プログラミングしてみよう73】JavaのLinkedListの使い方

Java

前回はTreeMapとTreeSetを学びました。

今回は「LinkedList」について解説します。ArrayListと同じListインターフェースを実装していますが、内部の仕組みが異なります。

LinkedListとArrayListの違い

ArrayList:   配列で管理 → インデックスアクセスが速い・中間への挿入が遅い
LinkedList:  連結リスト  → 先頭・末尾への挿入が速い・インデックスアクセスが遅い

要素を先頭または末尾に頻繁に追加・削除する場合はLinkedListが向いています。またLinkedListはDequeインターフェースも実装しているため、スタックやキューとしても使えます。

サンプルコード

ファイル作成

「Java61」フォルダに LinkedListTest.java という名前でファイルを作成します

コード入力

import java.util.LinkedList;

public class LinkedListTest {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<>();

        // 末尾に追加
        list.add("たろう");
        list.add("はなこ");

        // 先頭に追加
        list.addFirst("ぱんまる");

        // 末尾に追加
        list.addLast("けんじ");

        System.out.println("リスト: " + list);
        System.out.println("先頭: " + list.getFirst());
        System.out.println("末尾: " + list.getLast());

        // 先頭・末尾から削除
        System.out.println("先頭を削除: " + list.removeFirst());
        System.out.println("末尾を削除: " + list.removeLast());
        System.out.println("削除後: " + list);

        // スタックとして使う
        System.out.println("\n--- スタックとして使う ---");
        LinkedList<Integer> stack = new LinkedList<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        System.out.println("push後: " + stack);
        System.out.println("pop: " + stack.pop());
        System.out.println("pop後: " + stack);

        // キューとして使う
        System.out.println("\n--- キューとして使う ---");
        LinkedList<String> queue = new LinkedList<>();
        queue.offer("A");
        queue.offer("B");
        queue.offer("C");
        System.out.println("offer後: " + queue);
        System.out.println("poll: " + queue.poll());
        System.out.println("poll後: " + queue);
    }
}

コンパイル

javac LinkedListTest.java

実行

java LinkedListTest

実行結果は次のようになります。

リスト: [ぱんまる, たろう, はなこ, けんじ]
先頭: ぱんまる
末尾: けんじ
先頭を削除: ぱんまる
末尾を削除: けんじ
削除後: [たろう, はなこ]

--- スタックとして使う ---
push後: [3, 2, 1]
pop: 3
pop後: [2, 1]

--- キューとして使う ---
offer後: [A, B, C]
poll: A
poll後: [B, C]

使い分けのまとめ

ArrayList    // 基本はこちら。インデックスアクセスが多い場合
LinkedList   // 先頭・末尾への追加削除が多い場合
ArrayDeque   // スタック・キューとして使う場合(LinkedListより高速)

まとめ

LinkedListは先頭・末尾への挿入・削除が得意なリストです。ListとDequeの両方として使えますが、スタックやキューとして使う場合はArrayDequeの方が高速です。用途に合わせて使い分けましょう。

2026/08/21(金) ぱんまる

コメント

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