目次
ArrayListとは
Javaで複数の値をとりまとめて管理するArrayList。配列と並びよく使われるArrayListは、業務システム・ゲーム・アプリ開発に関わらずよく使われています。この記事では、JavaのArrayListの使い方と、配列との違いを解説します。
ArrayListは複数の要素を入れるための入れ物
JavaのArrayListは大きさが決まっていない配列のようなものとイメージしてください。ArrayListは、複数の値を管理する時に使います。
ArrayListと配列の違い
ArrayListと配列は、複数の要素をとりまとて管理できる点では似た機能をもっていますが、違いもあります。実際、どのような違いがあるのでしょうか?
ArrayListはサイズ(要素数)が可変
配列には格納できる要素の大きさが決まっています。その為、あらかじめ決めた大きさを超える要素を格納すると、IndexOutOfBoundsExceptionエラーが発生します。それに対し、ArrayListは要素数の大きさが決まっていません。要素数の上限値を気にせず、どんどん値を追加できます。
宣言方法が違う
ArrayListと配列は、機能的な特徴が似ていますが、宣言方法については大きく異なります。ArrayListと配列の宣言方法をそれぞれ見てみましょう。
【ArrayListの宣言】
List<String> a = new ArrayList<>();
【配列の宣言】
String[] a = new String[5];
上のサンプルコードを見ても分かる通り、要素数が可変なArrayListは、宣言時にリストの大きさを指定する必要がないのに対し、配列は宣言時に要素数を必ず指定する必要があります。
ArrayListはプリミティブ型は入れられない
JavaのArrayListには、プリミティブ型(int、booleanなどの値型)は入れられません。プリミティブ型の値をArrayListの要素に格納したい場合は、プリミティブ型に対応するラッパークラスを指定します。
例えば、プリミティブ型のintでArrayListを宣言する場合、intに対応するラッパークラスのIntegerを型に指定します。実際の例を見てみましょう。
List<Integer> a = new ArrayList<>();
ArrayListの初期化
ArrayListを初期化する方法を解説します。ArrayListの宣言方法は前の方法で少し触れましたが、もう少し詳細に解説していきます。
構文
JavaのArrayListを初期化する構文は以下の通りです。ArrayListは「java.util」配下のパッケージに属するクラスのため、ファイルの先頭で必要なクラスをimportしましょう。
4行目の山カッコの中には、ArrayListに要素に入れるデータ型を指定します。
import java.util.List; import java.util.ArrayList; List<型> 変数名 = new ArrayList<>();
要素を指定してArrayListを初期化
ArrayListを初期化する時に、中に入れる要素も一緒に指定して初期化することもできます。
初期化ブロック構文
匿名クラスと初期化ブロックの構文を使用して、ArrayListの初期化時に、まとめて要素に入れる値をセットできます。
import java.util.ArrayList; import java.util.List; List<String> 変数名 = new ArrayList<>() { { add("Apple"); add("Google"); } };
ArraysクラスのasListで要素を指定して初期化
もう一つの方法として、asList関数を使用してもArrayListの初期化時に、まとめて要素に入れられます
import java.util.ArrayList; import java.util.Arrays; import java.util.List; List<String> 変数名 = new ArrayList<String>(Arrays.asList("Apple", "Google"));
ArrayListに要素を設定する
ArrayListへ要素を追加・更新・削除する方法を解説します。
要素を1件追加する(add)
ArrayListに要素を1件追加するには、addメソッドを使用します。addメソッドで追加された値は、リストの最後尾に追加されます。
list.add("値");
要素を複数まとめて追加する(addAll)
まとめて複数の要素を追加するには、addAllメソッドを使用します。次の例では、ArrayListの内容を、別のArrayListにまとめて追加しています。
List<String> list1 = new ArrayList<>(); list1.add("apple"); list1.add("google"); list1.add("microsoft"); List<String> list2 = new ArrayList<>(); list2.addAll(list1); System.out.println(list2);
【実行結果】
[apple, google, microsoft]
要素の値を更新する
ArrayListの任意の要素を更新する方法を見ていきましょう。
インデックス指定で要素を更新
インデックス指定で要素の値を書き換える場合は、次のように記述します。以下の例では、ArrayListの先頭要素を書き換えています。
List<String> list = new ArrayList<String>(Arrays.asList("Apple", "Google")); list[0] = "Microsoft" //-> 「Apple」が「Microsoft」に書き換わる
インデックスは0〜始まることに注意。Javaを含めたほとんどのプログラミング言語では、配列やArrayListのインデックスは0〜始まります。そのため、1番目の要素は「0」、2番目の要素は「1」のように指定します。
setメソッドで要素を更新
要素の値を書き換えるもう一つの方法として、setメソッドがあります。こちらは、変更する要素のインデックスと値を引数して要素の値を書き換えます。
変数名.set(インデックス, 変更する値)
要素を1件削除する(remove)
ArrayListの要素を削除する方法も見ていきましょう。インデックスを指定して、ArrayListの特定の要素を削除する場合は、次のように記述します。
List<String> list = new ArrayList<String>(Arrays.asList("Apple", "Google")); list.remove(0); //「Apple」の要素が削除される
すべての要素を削除する(clear)
ArrayListの要素をすべて削除する場合、clearメソッドを使用します。
list.clear();
ArrayListの要素から値を取得する
ArrayListに追加した要素の値を取得する方法も見ていきましょう。
インデックス指定で取得する
インデックス指定で要素の値を取得するには、次のように記述します。
List<String> list = new ArrayList<String>(Arrays.asList("Apple", "Google")); list[0]; //-> 「Apple」が取得できる
getメソッドで要素から値を取得する
setメソッドで値が書換えられるのとは逆に、getメソッドで要素の値が取得できます。
List<String> list = new ArrayList<String>(Arrays.asList("Apple", "Google")); list.get(0); //-> 「Apple」が取得できる
ArrayListをforで繰り返し処理する
ArrayListに要素を追加した後は、追加した要素を繰り返しで処理することが多いでしょう。以下の記事で配列やArrayListをforで繰り返す方法を紹介していますので、詳しく知りたい型は参照してください。
【関連記事】
▶【Java入門】for文について
配列をArrayListに変換する(その逆も)
ArrayListを配列に変換したり、逆に配列をArrayListに変換する方法について解説します。知っていると便利なので、是非おぼえてください。
配列をArrayListに変換
配列をArrayListへ変換する時は、ArraysクラスのasListメソッドを使用します。
String[] array = {"Apple", "Google", "Microsoft"}; List<String> list = Arrays.asList(array);
ArrayListを配列へ変換
上とは逆に、ArrayListを配列に変換するには、toArrayメソッドを使用します。
List<String> list = new ArrayList<String>(Arrays.asList("Apple", "Google", "Microsoft")); String[] array = list.toArray(new String[list.size()]);
まとめ
JavaのArrayListの使い方について解説しました。ArrayListはJavaで開発では必ずと言っていいほど、よく使います。使い方をマスターしてJavaの知識を向上させましょう。
【関連記事】
▶【Java入門】配列と初期化について
プリミティブ型とは、基本データ型とも呼ばれ、変数はデータそのものを表し振る舞い(メソッド)を持ちません。具体的には以下のデータ型がプリミティブ型と呼ばれています。
boolean, char, byte, short, int, long, float, double
※ Stringはプリミティブ型ではありません