結論

概念役割
List順序付けられた要素の集合。インデックスで値を管理する
重複許可(同じ値を複数持てる)
主な実装クラスArrayList(配列ベース、ランダムアクセスが速い)

複数の値をまとめて扱う仕組みを コレクションフレームワーク と呼び、Listはその代表格。配列との違いは「サイズが可変」「便利メソッドが揃っている」の2点。

サンプルコード

List インターフェースと ArrayList 実装クラスをimportして使う。

import java.util.ArrayList; // Listの実装クラスであるArrayListをインポート
import java.util.List;      // Listインターフェースをインポート

public class Main {

    public static void main(String[] args) {

        // ArrayListのインスタンスを生成し、List型の変数sampleListに代入
        List<Integer> sampleList = new ArrayList<>();

        // sampleListに0〜9まで挿入
        for (int i = 0; i < 10; i++) {
            sampleList.add(i);
        }

        // sampleListの要素を全て表示
        for (int i = 0; i < sampleList.size(); i++) {
            System.out.print(sampleList.get(i) + " ");
        }

        sampleList.add(10); // リストの末尾に10を追加

        System.out.println();
        for (int i = 0; i < sampleList.size(); i++) {
            System.out.print(sampleList.get(i) + " ");
        }

        sampleList.add(1, 11); // 要素番号1に11を追加
        sampleList.remove(0);  // 要素番号0を削除(最初の0が削除される)

        System.out.println();
        for (int i = 0; i < sampleList.size(); i++) {
            System.out.print(sampleList.get(i) + " ");
        }

        System.out.println();
        System.out.println(sampleList.get(0)); // 要素番号0の値を表示(11が表示される)
    }
}

実行結果:

0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9 10
11 1 2 3 4 5 6 7 8 9 10
11

ポイントは2つ。

  • List<Integer> = new ArrayList<>() という書き方: 変数の型はインターフェース(List)、実体は実装クラス(ArrayList)にしておく。これで後から実装を差し替えやすくなる
  • インデックスは0始まりadd(1, 11) は「2番目の位置に11を割り込ませる」という意味になる

代表メソッド

メソッド概要戻り値
add(E element)リストの末尾に要素を追加boolean
add(int index, E element)指定位置に要素を挿入(後続要素は1つ後ろにシフト)void
get(int index)指定位置の要素を返すE(要素の型)
remove(int index)指定位置の要素を削除(後続要素は1つ前にシフト)E(削除した要素)
size()リスト内の要素数を返すint

add(int, E)remove(int) は、後続要素のシフトが発生する点に注意。先頭近くで頻繁に挿入・削除する用途では LinkedList のほうが速いが、ランダムアクセス(get(i))は ArrayList のほうが圧倒的に速い。迷ったら ArrayList でよい。

型パラメータの制約 — 基本型は使えない

List<型名>型パラメータには参照型しか指定できない

List<int> sampleList = new ArrayList<>();      // コンパイルエラー
List<Integer> sampleList = new ArrayList<>();  // OK

基本型(プリミティブ型)の値を格納したい場合は、対応する ラッパークラス を指定する。

基本型ラッパークラス
intInteger
doubleDouble
booleanBoolean
charCharacter
longLong

ラッパークラスを使う以上、== 比較ではなく .equals() を使うべき場面が出てくる。詳細は Javaの == と equals() の使い分け を参照。

まとめ

  • Listは「順序付き・重複許可・インデックスアクセス」のコレクション
  • 実装クラスは基本 ArrayList でよい
  • 変数型は List<E> で宣言、実体は new ArrayList<>() で生成するのが定石
  • 型パラメータには参照型のみ指定可。基本型はラッパークラスで代替する

関連記事:

変更履歴

  • 2026-05-05: 初版公開