【Java】2次元配列の初期化方法を徹底解説!初心者向けサンプル付きでわかりやすく解説

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

Javaでプログラミングを進めていくと、
1次元配列だけでは表現しきれないデータを扱う場面が出てきます。

そのとき登場するのが「2次元配列」です。
勉強中の方には、宣言・初期化の仕組みや使い方がやや分かりにくいですが、
仕組みを理解しておけばデータ処理や実務で大いに役立ちます。

この記事では、Javaでの2次元配列の初期化方法を、
基本から実務例、代替手法までサンプルコードを交えて解説します。


2次元配列とは?基本を整理

配列の配列としての2次元配列

Javaにおける2次元配列は、実態としては「配列の配列」です。
つまり、int[][] のように定義されたものは
int[] を要素に持つ配列」と考えることができます。

例:

int[][] matrix = new int[3][4];

この場合、「3行4列」の配列が作成されます。
すべての要素は初期値として 0 が入ります。


基本的な2次元配列の初期化方法

方法1:サイズを指定して初期化

最も基本的な初期化方法は、
行数と列数を指定するやり方です。

public class ArrayInitExample {
    public static void main(String[] args) {
        int[][] numbers = new int[2][3];
        System.out.println(numbers[0][0]); // 出力: 0
    }
}

この場合、2行3列の配列が作られ、
各要素には初期値の0が自動的に格納
されます。

方法2:リテラルを使って初期化

あらかじめ値が分かっている場合は、
次のようにリテラルで初期化できます。

public class ArrayLiteralExample {
    public static void main(String[] args) {
        int[][] numbers = {
            {1, 2, 3},
            {4, 5, 6}
        };
        System.out.println(numbers[1][2]); // 出力: 6
    }
}

こちらの方が直感的で、テストデータを用意する際によく使われます。

方法3:後から行ごとに初期化

Javaでは「配列の配列」であるため、各行を独立して初期化することも可能です。

public class ArrayRowInitExample {
    public static void main(String[] args) {
        int[][] numbers = new int[3][];
        numbers[0] = new int[] {1, 2};
        numbers[1] = new int[] {3, 4, 5};
        numbers[2] = new int[] {6};
        System.out.println(numbers[1][2]); // 出力: 5
    }
}

このように、行ごとに列数を変える「ジャグ配列(段違い配列)」を作ることもできます。


実務での利用例:表形式データの管理

例えば、社員の勤怠データを「日付 × 社員ID」で
管理するようなケースを考えてみましょう。

public class WorkLogExample {
    public static void main(String[] args) {
        int[][] workHours = {
            {8, 7, 6}, // 社員Aの勤務時間
            {9, 8, 8}, // 社員Bの勤務時間
            {7, 6, 9}  // 社員Cの勤務時間
        };
        System.out.println("社員Bの2日目の勤務時間: " + workHours[1][1] + "時間");
    }
}

このように、2次元配列を使えば
表形式のデータを直感的に扱う
ことができます。


代替手法:Listを使った初期化

実務では、サイズが可変なデータを扱うことが多いため、
配列ではなくListを使うケースもあります。

import java.util.*;

public class ListExample {
    public static void main(String[] args) {
        List<List<Integer>> list = new ArrayList<>();
        list.add(Arrays.asList(1, 2, 3));
        list.add(Arrays.asList(4, 5, 6));

        System.out.println(list.get(1).get(2)); // 出力: 6
    }
}

こちらの方が柔軟性が高く、DBの結果を受け取る際や、
要素数が変化するデータを扱うときに便利
です。


注意点:経験の浅い方が間違えやすいポイント

  1. 固定サイズであることを忘れない
    new int[3][4] で作った配列はサイズ変更できません。
    可変データにはListを検討しましょう。
  2. ジャグ配列に注意
    各行で列数を変えられる反面、numbers[2][5] のように
    存在しない要素にアクセスすると ArrayIndexOutOfBoundsException が発生します。
  3. 初期値は型によって異なる
    • int:0double:0.0boolean:falseString:null
    これを理解しておかないと、「意図せずnullが入っていた」という不具合につながります。

まとめ

  • Javaの2次元配列は「配列の配列」として実装されている。
  • 初期化方法は大きく分けて3種類(サイズ指定・リテラル・行ごとに代入)
  • 実務では表形式のデータを扱うのに便利だが、サイズ固定の制約がある。
  • 可変データを扱いたい場合はList<List<>>を活用するのが実用的。
  • 経験の浅い方は「固定サイズ」「ジャグ配列の挙動」「初期値の違い」に特に注意が必要。

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