前回は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(金) ぱんまる


コメント