【Java】ArrayListと2次元配列の変換方法まとめ|初心者向けサンプル付き解説

お疲れ様です。はるさらと申します。

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次元配列の相互変換について解説しました。

  • toArrayArrays.asListを使う方法が基本
  • 実務ではString配列の変換が多い
  • 柔軟さを重視する場合はList<List<T>>も有効

2次元配列そのものについて学びたい方は、
以下の記事も合わせて読むと理解が深まります。

どなたかのお役に立てば幸いです。
それではまたー!