Java では 多次元の ArrayList を作成することができますか?

はい、Java では 多次元の ArrayList を作成することができます!

通常の 配列(Array) では、多次元配列(例えば int[][] など)を作ることができますが、ArrayList でも同じように「ArrayList の中に ArrayList を入れる」ことで多次元のデータ構造を表現できます。


多次元 ArrayList の作成方法

Java で多次元の ArrayList を作成するには、ArrayList<ArrayList<T>> のように 入れ子構造 にします。

例:2次元の ArrayList を作る

import java.util.ArrayList;

public class MultiDimArrayListExample {
    public static void main(String[] args) {
        // 2次元の ArrayList を作成
        ArrayList<ArrayList<Integer>> multiDimList = new ArrayList<>();

        // 3つの行を追加
        for (int i = 0; i < 3; i++) {
            multiDimList.add(new ArrayList<>());  // 各行に新しい ArrayList を追加
        }

        // データを追加
        multiDimList.get(0).add(1);
        multiDimList.get(0).add(2);
        multiDimList.get(1).add(3);
        multiDimList.get(1).add(4);
        multiDimList.get(2).add(5);
        multiDimList.get(2).add(6);

        // 表示
        System.out.println(multiDimList);
    }
}

実行結果

[[1, 2], [3, 4], [5, 6]]

ArrayList のリストを作ることで、配列と同じように多次元のデータを扱えます!


3次元の ArrayList を作る

さらに、3次元の ArrayList も作成可能です。

例:3次元の ArrayList

import java.util.ArrayList;

public class ThreeDimArrayList {
    public static void main(String[] args) {
        // 3次元の ArrayList
        ArrayList<ArrayList<ArrayList<Integer>>> threeDimList = new ArrayList<>();

        // 2×2×2のデータ構造を作成
        for (int i = 0; i < 2; i++) {
            threeDimList.add(new ArrayList<>());
            for (int j = 0; j < 2; j++) {
                threeDimList.get(i).add(new ArrayList<>());
                for (int k = 0; k < 2; k++) {
                    threeDimList.get(i).get(j).add(i + j + k);  // データ追加
                }
            }
        }

        // 表示
        System.out.println(threeDimList);
    }
}

実行結果

[[[0, 1], [1, 2]], [[1, 2], [2, 3]]]

各次元に ArrayList をネストすることで、3次元以上のデータ構造も簡単に作れます。


多次元 ArrayList のメリットとデメリット

メリット

可変長のデータが扱える
 → ArrayList はサイズが動的に変えられるので、行や列の数が決まっていなくても対応できる。

異なる長さのリストもOK
 → 各行ごとに異なる長さのリストを持てる(ジャグ配列のような構造が可能)。

デメリット

アクセスが遅くなる可能性
 → ArrayList は配列と違い、データを直接参照できないため、ランダムアクセスが少し遅くなる。

メモリ消費が増える
 → ArrayList は内部でオブジェクトを参照しているため、プリミティブ型の配列よりメモリを余分に消費する。


どんなときに使うべき?

  • 行ごとに異なるサイズのデータを扱いたいとき
  • 要素を頻繁に追加・削除したいとき
  • 固定サイズではなく可変サイズの多次元配列が必要なとき

一方で、データ量が多く、アクセス速度が重要な場合は、int[][] のような 普通の配列を使うほうが高速 です!


まとめ

  • ArrayList<ArrayList<T>> を使えば 2次元のリスト を作れる。
  • ArrayList<ArrayList<ArrayList<T>>> を使えば 3次元以上のリスト も可能。
  • サイズ可変で便利だが、アクセス速度やメモリ消費には注意

用途に応じて ArrayList配列 を使い分けましょう!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。