HOWTO · Java
Java で配列から ArrayList を作成する方法
このチュートリアルでは、Java で Array から ArrayList を作成する方法を説明します。
このページの内容
参照型の配列は、new ArrayList<>(Arrays.asList(array))、Collections.addAll(list, array)、または add() を呼び出すループを使って、サイズ変更可能な ArrayList に変換できます。最初の方法は簡潔で、2つ目は作成済みのリストに要素を追加するときに便利です。ループを使えば、各要素を絞り込んだり変換したりしてから追加できます。
Javaの配列とは
配列には、同じ型の値を一定数格納します。長さは作成時に決まり、配列自体を伸縮させることはできません。たとえば、String[] subjects = {"maths", "english"}; は、2つの要素を持つ配列を作成します。
Javaの ArrayList とは
ArrayList<E> は、java.util にあるJavaの List<E> インターフェースのサイズ変更可能な実装です。要素を追加すると大きくなり、削除すると小さくなります。格納できるのは参照型です。数値などのプリミティブ型には、int に対する Integer のような対応するラッパー型を使います。
Javaの配列と ArrayList の違い
データの個数が固定でよい場合や、APIが配列を要求する場合は配列を使います。リストの操作が必要な場合や、要素数が変わる見込みがある場合は ArrayList を使います。変換しても元の配列がサイズ変更可能になるわけではありません。別のリストを作成するか、既存のリストに要素を追加します。コピーされるのはオブジェクトへの参照なので、両方のコンテナーが同じオブジェクトを参照する場合があります。
Arrays.asList() を使って配列から ArrayList を作成する
配列を Arrays.asList() に渡し、その戻り値を ArrayList のコンストラクターに渡します。コンストラクターは要素を新しいサイズ変更可能なリストにコピーします。一方、Arrays.asList() だけを使うと、配列を背後で参照する固定サイズのリストが返されます。この場合、要素の置き換えは配列とリストの両方に反映されますが、リストへの要素の追加や削除はサポートされません。
次の例を実行します。
このセクションのコードと表示されるラベルや出力は英語のままです。
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String[] subjects = {"maths", "english", "history"};
ArrayList<String> subjectList = new ArrayList<>(Arrays.asList(subjects));
subjectList.add("physics");
System.out.println(subjectList);
}
}
[maths, english, history, physics]
Collections.addAll() を使って配列から ArrayList を作成する
まず追加先のリストを作成し、そのリストと元の配列を Collections.addAll() に渡します。リストにすでに値が入っている場合や、配列の要素をそのリストに加えたい場合に便利です。追加先のリストは引き続きサイズ変更できます。
このセクションのコードと表示されるラベルや出力は英語のままです。
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
String[] names = {"john", "emma", "rick"};
ArrayList<String> nameList = new ArrayList<>();
Collections.addAll(nameList, names);
nameList.add("tim");
System.out.println(nameList);
}
}
[john, emma, rick, tim]
ループと add() を使って配列から ArrayList を作成する
ループを使うと、各要素を追加する前に確認したり変換したりできます。追加先のリストを独自の方法で作りたい場合にも適しています。
このセクションのコードと表示されるラベルや出力は英語のままです。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
String[] planets = {"earth", "mars", "venus"};
ArrayList<String> planetList = new ArrayList<>();
for (String planet : planets) {
planetList.add(planet);
}
System.out.println(planetList);
}
}
[earth, mars, venus]
ここまでの例では参照型の配列を使っています。int[] のようなプリミティブ配列をこれらのジェネリックな変換方法に渡しても、List<Integer> にはできません。Arrays.asList(intArray) は配列全体を1つの要素として扱います。各値を Integer にボクシングするには、ループを使います。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
int[] scores = {7, 12, 18};
ArrayList<Integer> scoreList = new ArrayList<>();
for (int score : scores) {
scoreList.add(score);
}
System.out.println(scoreList);
}
}
[7, 12, 18]
配列から ArrayList を作成する方法を選ぶ
新しいサイズ変更可能なリストに簡潔にコピーするなら、new ArrayList<>(Arrays.asList(array)) を使います。追加先のリストがすでにある場合は、Collections.addAll(existingList, array) を選びます。要素をコピーしながら絞り込んだり変換したり、個別に処理したりする必要がある場合はループを使います。プリミティブ配列では、値を1つずつ追加すると、Javaが ArrayList に必要なラッパー型にボクシングできます。