🎯
【Java】配列からListへ変換
配列からListへ変換
配列からListへ変換する方法をいくつか紹介します。
拡張for文とadd()
// 配列(プリミティブ型)
int[] ar = {1, 2, 3};
// リスト
ArrayList<Integer> li = new ArrayList<>();
// 拡張for文とaddメソッド
for (Integer i : ar) {
li.add(i);
}
System.out.println(li); // 出力結果 -> [1, 2, 3]
拡張for文で変換できるのですから、当然for文でも変換が可能です。ただ、for文の紹介については割愛させていただきます。どうしても知りたいという方は、下記を参考にしてください。
Collections.addAll()
// 配列(ラッパークラス)
Integer[] ar = {1, 2, 3};
// リスト
ArrayList<Integer> li = new ArrayList<>();
// Collections.addAll
Collections.addAll(li, ar);
System.out.println(li); // 出力結果 -> [1, 2, 3]
Collections.addAll()
は第一引数が要素を追加する対象のコレクションであり、第二引数以降は追加する要素です。
- 配列の宣言
第二引数の配列はラッパークラスのみが対象となりますので、配列をラッパークラスで宣言する必要があります。
Arrays.asList()
// 配列(ラッパークラス)
Integer[] ar = {1, 2, 3};
// Arrays.asList()
List<Integer> li = Arrays.asList(ar);
System.out.println(li); // 出力結果 -> [1, 2, 3]
Arrays.asList()
は配列の要素を固定サイズのListに変換して返します。
-
配列の宣言
配列をラッパークラスで宣言する必要があります。 -
要素の変更
Arrays.asList()
で返されるListは、元の配列と同じ要素を参照するため、set()
を使って変更すると元の配列も変更されます。
Integer[] ar = {1, 2, 3};
// Arrays.asList()
List<Integer> li = Arrays.asList(ar);
li.set(2, 4);
System.out.println(li); // リストの出力結果 -> [1, 2, 4]
System.out.println(Arrays.toString(ar)); // 配列の出力結果 -> [1, 2, 4]
- 要素の追加
返されるListが固定サイズであるため、このListにadd()
を使って要素の追加を行うと、例外が発生します。
// 配列(ラッパークラス)
Integer[] ar = {1, 2, 3};
// Arrays.asList()
List<Integer> li = Arrays.asList(ar);
li.add(4); // ランタイムエラー
List.of()
// 配列(ラッパークラス)
Integer[] ar = {1, 2, 3};
// List.of()
List<Integer> li = List.of(ar);
System.out.println(li); // 出力結果 -> [1, 2, 3]
List.of()
は配列の要素を不変のListに変換して返します。
- 配列の宣言
配列をラッパークラスで宣言する必要があります。 - 要素の変更
返されるListが不変であるため、set()
を使って要素の変更を行うと、例外が発生します。 - 要素の追加
返されるListが不変であるため、add()
を使って要素の追加を行うと、例外が発生します。
Arrays.stream().collect(Collectors.toList())
// 配列
Integer[] ar = {1, 2, 3};
// collect(Collectors.toList())
List<Integer> li = Arrays.stream(ar).collect(Collectors.toList());
System.out.println(li); // 出力結果 -> [1, 2, 3]
collect(Collectors.toList())
は、可変のリストを生成します。
- 要素の変更
返されるListが可変であるため、set()
を使って要素の変更を行うことができます。 - 要素の追加
返されるListが可変であるため、add()
を使って要素の追加を行うことができます。
Arrays.stream().toList()
// 配列
Integer[] ar = {1, 2, 3};
// toList();
List<Integer> li = Arrays.stream(ar).toList();
System.out.println(li); // 出力結果 -> [1, 2, 3]
toList()
は、不変のリストを返します。
- 要素の変更
返されるListが不変であるため、set()
を使って要素の変更を行うと、例外が発生します。 - 要素の追加
返されるListが不変であるため、add()
を使って要素の追加を行うと、例外が発生します。
【参考】プリミティブ型の配列をラッパークラスのリストへ変換する方法 【boxed()】
上記のtoList()
を使ったコードを例にプリミティブ型の配列をラッパークラスのリストへ変換します。
// 配列(プリミティブ型)
int[] ar = {1, 2, 3};
// boxed()
List<Integer> li = Arrays.stream(ar).boxed().toList();
System.out.println(li); // 出力結果 -> [1, 2, 3]
Discussion