言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Java辞典

  1. トップページ
  2. Java辞典
  3. new ArrayList<>() / リスト.add() / set() / get()

new ArrayList<>() / リスト.add() / set() / get()

対応: Java 1.2(1998)

可変長のリストを作成し、要素を追加・変更・取得するためのメソッドです。『ArrayList』は配列と違って要素数を動的に変更できるため、サイズが事前に決まらないデータを扱う場面で広く使われます。

構文

import java.util.ArrayList;

// 空の ArrayList を作成
new ArrayList<型>();

// 末尾に要素を追加
リスト.add(E e);

// 指定した位置に要素を挿入
リスト.add(int index, E e);

// 指定した位置の要素を変更
リスト.set(int index, E element);

// 指定した位置の要素を取得
リスト.get(int index);

メソッド一覧

メソッド概要
new ArrayList<>()空の可変長リストを作成します。型引数にはリストに格納する要素の型を指定します。
add(E e)リストの末尾に要素を追加します。追加が成功した場合は『true』を返します。
add(int index, E e)指定したインデックスに要素を挿入します。それ以降の要素は後ろにシフトされます。
set(int index, E element)指定したインデックスの要素を新しい値に置き換えます。置き換え前の要素を返します。
get(int index)指定したインデックスの要素を返します。インデックスは0始まりです。

サンプルコード

ArrayListAddGet.java
import java.util.ArrayList;

class ArrayListAddGet {
    public static void main(String[] args) {
        ArrayList<String> fighters = new ArrayList<>();
        fighters.add("八神庵");
        fighters.add("草薙京");
        fighters.add("テリー・ボガード");
        System.out.println(fighters);

        fighters.add(1, "ブルー・マリー");
        System.out.println(fighters);

        System.out.println(fighters.get(0));
        System.out.println(fighters.get(2));

        String old = fighters.set(0, "ゲーニッツ");
        System.out.println(old);
        System.out.println(fighters);

        ArrayList<Integer> nums = new ArrayList<>();
        for (int i = 1; i <= 5; i++) {
            nums.add(i * 10);
        }
        System.out.println(nums);
    }
}

コンパイルして実行すると次のようになります。

javac ArrayListAddGet.java
java ArrayListAddGet
[八神庵, 草薙京, テリー・ボガード]
[八神庵, ブルー・マリー, 草薙京, テリー・ボガード]
八神庵
草薙京
八神庵
[ゲーニッツ, ブルー・マリー, 草薙京, テリー・ボガード]
[10, 20, 30, 40, 50]

よくあるミス

よくあるミス1: IndexOutOfBoundsException(存在しないインデックスにアクセス)

『get()』や『set()』は0始まりのインデックスを使います。リストのサイズを超えたインデックスにアクセスすると『IndexOutOfBoundsException』がスローされます。

IndexNg.java
import java.util.ArrayList;

class IndexNg {
    public static void main(String[] args) {
        ArrayList<String> fighters = new ArrayList<>();
        fighters.add("八神庵");
        fighters.add("草薙京");
        fighters.add("テリー・ボガード");
        System.out.println(fighters.get(3));
    }
}

コンパイルして実行すると次のようになります。

javac IndexNg.java
java IndexNg
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 3 out of bounds for length 3

アクセス前に『size()』でリストの要素数を確認し、インデックスが有効な範囲内(0以上・size()未満)かどうかをチェックします。

IndexOk.java
import java.util.ArrayList;

class IndexOk {
    public static void main(String[] args) {
        ArrayList<String> fighters = new ArrayList<>();
        fighters.add("八神庵");
        fighters.add("草薙京");
        fighters.add("テリー・ボガード");
        int idx = 3;
        if (idx < fighters.size()) {
            System.out.println(fighters.get(idx));
        } else {
            System.out.println("インデックス " + idx + " は範囲外です(size=" + fighters.size() + ")");
        }
    }
}

コンパイルして実行すると次のようになります。

javac IndexOk.java
java IndexOk
インデックス 3 は範囲外です(size=3)

よくあるミス2: Arrays.asListで返るリストにaddしてUnsupportedOperationException

『Arrays.asList()』が返すリストは固定サイズです。要素の追加・削除を行おうとすると『UnsupportedOperationException』がスローされます。

AsListNg.java
import java.util.Arrays;
import java.util.List;

class AsListNg {
    public static void main(String[] args) {
        List<String> fighters = Arrays.asList("ブルー・マリー", "ゲーニッツ");
        fighters.add("草薙京");
    }
}

コンパイルして実行すると次のようになります。

javac AsListNg.java
java AsListNg
Exception in thread "main" java.lang.UnsupportedOperationException

要素の追加・削除が必要な場合は、『Arrays.asList()』の結果を『new ArrayList<>()』でラップして可変なリストを作成します。

AsListOk.java
import java.util.ArrayList;
import java.util.Arrays;

class AsListOk {
    public static void main(String[] args) {
        ArrayList<String> fighters = new ArrayList<>(Arrays.asList("ブルー・マリー", "ゲーニッツ"));
        fighters.add("草薙京");
        System.out.println(fighters);
    }
}

コンパイルして実行すると次のようになります。

javac AsListOk.java
java AsListOk
[ブルー・マリー, ゲーニッツ, 草薙京]

概要

『ArrayList』はJavaで最もよく使われるコレクションクラスです。内部的には配列で実装されており、末尾への追加(『add()』)と要素の取得(『get()』)はO(1)で高速に動作します。一方、途中への挿入はそれ以降の要素をシフトする必要があるためO(n)になります。

プリミティブ型(『int』、『double』など)は直接格納できません。ラッパークラス(『Integer』、『Double』など)を使用してください。ただし、Java のオートボクシング機能により『nums.add(1)』のように書くと自動的に『Integer』に変換されます。

要素の削除やサイズ確認には『remove() / clear() / size()』、要素の検索には『contains() / indexOf()』を使用してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。