お疲れ様です。はるさらと申します。
Javaを学んでいく中で、「ArrayList」と「2次元配列」を変換したいという
場面に出会うことがあります。
例えば、入力データが可変長であるため最初はArrayListで受け取り、
その後固定サイズの2次元配列に変換して処理したい場合などです。
逆に、2次元配列を柔軟に操作するためにArrayListへ変換したい場合もあります。
本記事では、ArrayListと2次元配列の変換方法について、
サンプルコードを交えながら丁寧に解説します。
実務で使える書き方や代替手法との比較も行いますので、
経験の浅い方にも伝わりやすいように解説していきます。
ArrayListと2次元配列の違い
ArrayListの特徴
- サイズを後から増減できる可変長のリスト
- ジェネリクスを使って型を指定できる
(ArrayList list<String>←コレ = new ArrayList<>();) - 追加や削除が簡単
2次元配列の特徴
- サイズが固定されており、途中で増減できない
int[][]やString[][]のように宣言する- メモリ効率や処理速度が安定している
状況に応じて使い分ける必要があり、そのために「変換」が役立ちます。
関連する記事として、2次元配列の初期化方法やArrayListでの実装も参考になるでしょう。
ArrayListから2次元配列に変換する方法
基本例(初心者向けサンプル)
import java.util.ArrayList;
public class ArrayListToArray {
public static void main(String[] args) {
ArrayList<int[]> list = new ArrayList<>();
list.add(new int[]{1, 2, 3});
list.add(new int[]{4, 5, 6});
// ArrayListを2次元配列に変換
int[][] array = list.toArray(new int[list.size()][]);
for (int[] row : array) {
for (int value : row) {
System.out.print(value + " ");
}
System.out.println();
}
}
}
このコードでは、toArrayメソッドを使って
簡単に2次元配列へ変換しています。
実務利用例(文字列のケース)
実務では文字列のリストを扱うことが多いため、
そのサンプルも紹介します。
import java.util.ArrayList;
public class ArrayListToStringArray {
public static void main(String[] args) {
ArrayList<String[]> list = new ArrayList<>();
list.add(new String[]{"山田", "太郎"});
list.add(new String[]{"佐藤", "花子"});
String[][] array = list.toArray(new String[list.size()][]);
for (String[] row : array) {
System.out.println(String.join(" ", row));
}
}
}
注意点
ArrayListの中身がnullの場合、そのまま配列に変換される- 各要素の配列サイズが異なる場合、「ジャグ配列」になる
→ 例:[ [1,2,3], [4,5] ]のように列数が揃わない
2次元配列からArrayListに変換する方法
基本例
import java.util.ArrayList;
import java.util.Arrays;
public class ArrayToArrayList {
public static void main(String[] args) {
int[][] array = { {1, 2}, {3, 4, 5} };
ArrayList<int[]> list = new ArrayList<>(Arrays.asList(array));
for (int[] row : list) {
System.out.println(Arrays.toString(row));
}
}
}
Arrays.asListを使うと、配列をそのままリストに変換できます。
実務利用例(String配列)
import java.util.ArrayList;
import java.util.Arrays;
public class ArrayToArrayListString {
public static void main(String[] args) {
String[][] array = { {"Java", "Spring"}, {"Python", "Django"} };
ArrayList<String[]> list = new ArrayList<>(Arrays.asList(array));
for (String[] row : list) {
System.out.println(String.join(", ", row));
}
}
}
初心者がつまずきやすいポイント
Arrays.asListで作成したリストは「固定サイズ」になる
→ 要素の追加・削除を行いたい場合はnew ArrayList<>(Arrays.asList(array))とする
ArrayListと2次元配列の代替手法比較
2次元配列とArrayListを直接変換するのではなく、
List<List<T>> を使う方法もあります。
import java.util.ArrayList;
import java.util.List;
public class NestedListExample {
public static void main(String[] args) {
List<List<Integer>> list = new ArrayList<>();
list.add(new ArrayList<>(List.of(1, 2, 3)));
list.add(new ArrayList<>(List.of(4, 5)));
for (List<Integer> row : list) {
System.out.println(row);
}
}
}
メリット
- 行ごとのサイズを柔軟に変えられる
- Javaの標準的な書き方として推奨されることが多い
デメリット
- メモリ効率はやや劣る
- 多次元アクセス(例:
list.get(i).get(j))の可読性が下がる
まとめ
本記事では、ArrayListと2次元配列の相互変換について解説しました。
toArrayやArrays.asListを使う方法が基本- 実務ではString配列の変換が多い
- 柔軟さを重視する場合は
List<List<T>>も有効
2次元配列そのものについて学びたい方は、
以下の記事も合わせて読むと理解が深まります。
どなたかのお役に立てば幸いです。
それではまたー!




































