Java入門 #15 - ArrayList の基本

入門 | 10分 で読める | 2026.05.02

公式ドキュメント

この記事の要点

ArrayList は要素数を自動的に増やせる可変長配列
• `ArrayList<型>` でジェネリクスを使い、型を指定する
• `add()` / `get()` / `set()` / `remove()` が基本操作

ArrayList とは

通常の配列(int[] など)はサイズ固定で、宣言時に要素数を決める必要があります。後から増やしたり減らしたりできません。

ArrayListjava.util.ArrayList クラスで提供される、可変長の配列(リスト) です。要素を自由に追加・削除でき、サイズが自動調整されます。

特徴説明
サイズ自動調整add() で要素を追加すると自動的に伸びる
型安全ジェネリクス(<型>)で扱う型を指定
豊富なメソッドcontains() / indexOf() / clear() など便利な操作が揃う

配列との違い

項目通常の配列ArrayList
サイズ固定(宣言時に決定)可変(自動伸長)
プリミティブ型 OK(int[]オブジェクト型のみ(ArrayList<Integer>
書き方arr[0] = 10;list.set(0, 10);
読み方arr[0]list.get(0)
長さ確認arr.lengthlist.size()
初期化の簡潔さ{1, 2, 3} で初期化可Arrays.asList()List.of() を使う

ポイント: プリミティブ型(int, double など)を扱いたい場合は、ラッパークラス(Integer, Double)を使います。例: `ArrayList<Integer>`

基本的な使い方

1. import

import java.util.ArrayList;

2. ArrayList の宣言と生成

// Java 21
ArrayList<String> names = new ArrayList<>();

<String> の部分がジェネリクスです。「このリストは String 型の要素を扱う」という意味です。

補足: `new ArrayList<>()` の `<>` は**ダイヤモンド演算子**と呼ばれ、型推論で右辺の型を省略できます(Java 7 以降)。

3. 要素を追加する(add)

names.add("Alice");
names.add("Bob");
names.add("Charlie");

リストの末尾に順次追加されます。

4. 要素を取得する(get)

String first = names.get(0);  // Alice
String second = names.get(1); // Bob

インデックスは0始まりです。

5. 要素数を確認する(size)

int count = names.size();  // 3

6. 要素を削除する(remove)

names.remove(1);  // インデックス 1(Bob)を削除
// names は ["Alice", "Charlie"] になる

または、値を指定して削除:

names.remove("Alice");  // "Alice" を削除

主要メソッド一覧

メソッド説明戻り値
add(E element)末尾に要素を追加boolean
add(int index, E element)指定位置に挿入void
get(int index)指定位置の要素を取得E
set(int index, E element)指定位置の要素を上書きE(元の値)
remove(int index)指定位置の要素を削除E(削除した値)
remove(Object o)指定値を削除(最初の1件)boolean
size()要素数を返すint
isEmpty()空かどうかboolean
contains(Object o)要素が含まれるかboolean
indexOf(Object o)要素の位置を返す(見つからない場合 -1)int
clear()全要素を削除void

注意: `get(index)` や `remove(index)` で存在しないインデックスを指定すると `IndexOutOfBoundsException` が発生します。

ジェネリクスの基本

ジェネリクス(Generics) は「型をパラメータ化する」仕組みです。ArrayList<String> なら「String 型のリスト」という意味になります。

意味
ArrayList<String>String のリスト
ArrayList<Integer>Integer のリスト
ArrayList<Person>Person クラスのリスト

プリミティブ型は使えないので、ラッパークラスを使います。

プリミティブ型ラッパークラス
intInteger
doubleDouble
booleanBoolean
charCharacter

例:

// Java 21
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);

int first = numbers.get(0);  // 10(自動アンボクシング)

補足: `numbers.add(10)` のように `int` を渡すと、自動的に `Integer` に変換されます(オートボクシング)。逆に `int first = numbers.get(0)` は自動アンボクシングされます。

拡張 for 文で走査する

ArrayList の全要素を順番に処理するには拡張 for 文が便利です。

// Java 21
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");

for (String fruit : fruits) {
    System.out.println(fruit);
}

出力:

Apple
Banana
Cherry

ポイント: インデックスを使わず、要素を直接取り出せます。読み取り専用の処理に向いています。

実践例: 学生の成績管理

// Java 21
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> scores = new ArrayList<>();

        // 成績を追加
        scores.add(85);
        scores.add(92);
        scores.add(78);
        scores.add(90);

        // 全成績を表示
        System.out.println("成績一覧:");
        for (int score : scores) {
            System.out.println(score + "点");
        }

        // 平均点を計算
        int sum = 0;
        for (int score : scores) {
            sum += score;
        }
        double average = (double) sum / scores.size();
        System.out.printf("平均点: %.1f点%n", average);

        // 90点以上の成績を抽出
        System.out.println("\n90点以上の成績:");
        for (int score : scores) {
            if (score >= 90) {
                System.out.println(score + "点");
            }
        }
    }
}

出力:

成績一覧:
85点
92点
78点
90点
平均点: 86.2点

90点以上の成績:
92点
90点

contains() と indexOf() の活用

特定の要素が含まれているか調べたり、位置を調べたりできます。

// Java 21
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> members = new ArrayList<>();
        members.add("Alice");
        members.add("Bob");
        members.add("Charlie");

        // 要素が含まれるか
        if (members.contains("Bob")) {
            System.out.println("Bob はメンバーです");
        }

        // 要素の位置を調べる
        int index = members.indexOf("Charlie");
        if (index != -1) {
            System.out.println("Charlie のインデックス: " + index);  // 2
        }

        // 存在しない要素
        int notFound = members.indexOf("David");
        System.out.println("David のインデックス: " + notFound);  // -1
    }
}

補足: `indexOf()` は見つからない場合 `-1` を返すので、必ず `-1` チェックをしましょう。

ArrayList の内部動作(補足)

ArrayList は内部で配列を持ち、要素が増えると自動的に配列を拡張します。

操作計算量(平均)備考
add(E) 末尾追加O(1)容量不足なら O(n) で再確保
add(int, E) 挿入O(n)後ろの要素をずらす必要がある
get(int) 取得O(1)インデックス直接アクセス
remove(int) 削除O(n)後ろの要素を詰める
contains(Object) 検索O(n)全要素を線形探索

注意: 大量の挿入・削除を繰り返す場合、`LinkedList` の方が効率的なケースもあります(応用)。

まとめ

概念説明
ArrayList可変長配列(リスト)を実現するクラス
ジェネリクス<型> で扱う型を指定。型安全を保証
add / get / set / remove基本的な追加・取得・更新・削除操作
size / isEmpty / contains状態確認メソッド
拡張 for 文全要素を順番に処理する簡潔な記法
ラッパークラスプリミティブ型を扱うため Integer 等を使う

次のステップ(シリーズ完結)

おめでとうございます! これで「Java入門」全15回が完結しました。ここまでで以下を学びました。

  • 開発環境、基本構文、制御フロー(if / switch / for / while)
  • 配列、メソッド、クラスとオブジェクト、コンストラクタ
  • 標準入力(Scanner)、可変長配列(ArrayList)

さらに学ぶべきこと

Java の世界はここから先が本番です。次のステップとして:

分野学習内容用途
コレクション応用HashMap, HashSet, LinkedListデータ構造の選択
例外処理try-catch-finally, 独自例外の作成エラーハンドリング
ファイル入出力Files, BufferedReader, Pathデータの永続化
継承とポリモーフィズムextends, interface, 抽象クラスオブジェクト指向設計
ラムダ式とStream APIstream(), filter(), map()関数型プログラミング
Spring BootWeb アプリケーション開発実務で最も使われるフレームワーク
データベース連携JDBC, JPA, Hibernate永続化層の実装
テストJUnit, Mockito品質保証

本サイトに今後 Spring Boot や Web 開発の入門記事が追加される予定です。定期的にチェックしてください。

ポイント: Java は巨大なエコシステムを持つ言語です。基礎をしっかり固めたら、実際に Web アプリや API を作ってみることで理解が深まります。

参考リソース

この技術を体系的に学びたいですか?

未来学では東証プライム上場企業のITエンジニアが24時間サポート。月額24,800円から、退会金0円のオンラインIT塾です。

メールで無料相談する
← 一覧に戻る