Java入門|多次元配列でデータを表のように扱う

配列を表のように使いこなす!多次元配列でデータ整理をレベルアップ

これまで扱ってきた配列は、横一列に並んだデータを管理するものでした。たとえば、テストの点数や1週間の記録など、「1つの並び」で表現できるデータに向いていましたね。

しかし実際のプログラムでは、「行と列」で表されるデータも多く登場します。たとえば、

  • 生徒 × 科目の点数
  • 商品 × 月ごとの売上
  • 行列データ

このようなデータを扱うときに便利なのが、多次元配列です。

多次元配列を使うと、データを「表(テーブル)」のように扱えるようになります。ここでは、2次元配列を中心に、その仕組みと使い方をわかりやすく解説していきます。

多次元配列とは何か

多次元配列は、「配列の中に配列を入れる」ことで作られます。
つまり、配列の要素そのものが配列になっている構造です。

たとえば、1次元配列はこのような形でした。

10  20  30  40

一方、2次元配列は次のようなイメージになります。

10  20  30
40  50  60

これは「行」と「列」を持つデータ構造で、表のように扱えます。

2次元配列の基本的な書き方

2次元配列は、次のように宣言します。

型名[][] 配列名;

そして、要素を確保するときはこう書きます。

配列名 = new 型名[行数][列数];

たとえば、3行4列の配列ならこうなります。

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

この場合、合計で 3 × 4 = 12 個の値を格納できます。

多次元配列のイメージを図で確認しよう

この図では、2次元配列が「表のように並んだ箱」であることを表しています。
1つ目の添字が「行」、2つ目の添字が「列」を表しています。

2次元配列の基本的な使い方

では、実際にプログラムで使ってみましょう。
ここでは「3人の生徒 × 2科目の点数」を扱う例にします。

ファイル名:Sample11.java

class Sample11
{
    public static void main(String[] args)
    {
        int[][] score;
        score = new int[2][3];   // 科目×人数の配列を準備

        // 国語の点数
        score[0][0] = 70;
        score[0][1] = 85;
        score[0][2] = 60;

        // 英語の点数
        score[1][0] = 80;
        score[1][1] = 75;
        score[1][2] = 90;

        for(int i = 0; i < 3; i++){
            System.out.println((i+1) + "人目の国語は " +
                               score[0][i] + "点です。");
            System.out.println((i+1) + "人目の英語は " +
                               score[1][i] + "点です。");
        }
    }
}

実行結果

1人目の国語は 70点です。
1人目の英語は 80点です。
2人目の国語は 85点です。
2人目の英語は 75点です。
3人目の国語は 60点です。
3人目の英語は 90点です。

添字の意味を整理しよう

2次元配列では、添字が2つあります。

書き方意味
score[0][0]1科目目・1人目
score[0][1]1科目目・2人目
score[1][0]2科目目・1人目

つまり、

  • 1つ目の添字 → 行(種類)
  • 2つ目の添字 → 列(データ)

と考えると理解しやすいです。

多次元配列はまとめて書くこともできる

1次元配列と同じように、2次元配列もまとめて初期化できます。

int[][] score = {
    {70, 85, 60},
    {80, 75, 90}
};

この書き方では、

  • 1行目 → 国語
  • 2行目 → 英語

というように、データのまとまりが見やすくなります。

行ごとに長さが違う配列も作れる

Javaの多次元配列は、すべての行の長さが同じでなくても問題ありません。

たとえば、次のような配列も作れます。

int[][] data = {
    {10, 20, 30},
    {40, 50},
    {60, 70, 80, 90}
};

このような配列は、行ごとに要素数が違います。

配列の長さを確認する方法

多次元配列では、length の使い方が少し変わります。

書き方意味
data.length行の数
data[i].lengthi行目の列の数

この違いはとても重要です。

行ごとの長さを確認するプログラム

では、行ごとの長さを調べるプログラムを見てみましょう。

ファイル名:Sample12.java

class Sample12
{
    public static void main(String[] args)
    {
        int[][] data = {
            {10, 20, 30},
            {40, 50},
            {60, 70, 80, 90}
        };

        for(int i = 0; i < data.length; i++){
            System.out.println((i+1) +
                "行目の要素数は " + data[i].length + " 個です。");
        }
    }
}

実行結果

1行目の要素数は 3 個です。
2行目の要素数は 2 個です。
3行目の要素数は 4 個です。

多次元配列のポイント整理

ここまでの内容を整理すると、次のようになります。

ポイント内容
多次元配列配列の中に配列がある構造
2次元配列表のように扱える
添字2つ使う(行と列)
初期化{} をネストして書く
length行と列で使い分ける

多次元配列は「表」を扱うための強力な道具

多次元配列を使うと、これまで1列でしか扱えなかったデータを、行と列の構造で整理できるようになります。

たとえば、

  • 生徒ごとの科目別成績
  • 商品ごとの売上データ
  • 表形式のデータ

こうした情報を自然な形で表現できます。

配列の考え方に「もう1つ次元を追加する」だけで、扱えるデータの幅が大きく広がります。ここまで理解できれば、配列の扱いはかなり実践的なレベルに近づいてきています。