多次元配列とは【ゼロから始めるJavaの基礎~番外編~】

今回はJavaにおける多次元配列についてのご紹介をしていきます。
配列についての知識があることを前提とした内容になっていますので、配列やインデックスについて不安があるという方は、先に配列に関する記事を参考にしていただけるといいかなと思います。

2次元配列と多次元配列

一般的に『配列』と呼ばれているものは、正確には『1次元配列』という配列です。
『配列は複数の要素をまとめて保管しておける、仕切り付きの箱のようなもの』と表現されることがよくありますね。

2次元配列というのは、この仕切り付きの箱が下の図のように階層構造になっているのを想像してもらうのが分かりやすいのかなと思います。(箱に振ってある数字はインデックスです)

1次元目の配列には2次元目の配列の情報が格納されています。

そして図のような階層構造の下に更に階層があれば、3次元配列、4次元配列といった具合に次元数を増やすことも可能です。
このような配列の階層構造のことを『多次元配列』と呼びます。

2次元配列の構文

次元数が増えても宣言や初期化の仕方は配列と似たような形のものとなっています。

2次元配列の宣言

【構文】

データ型 配列変数名[][];

(例)int numbers[][];

宣言のみを行う構文はこのようになります。1次元配列との違いは『[]』の数が1つ増えただけですね。

このように実現したい次元数に応じて『[]』の数を増減させます。

2次元配列の生成

【構文】

配列変数名 = new データ型 [要素数] [要素数];

(例)numbers = new int[3][5];

生成の構文も1次元配列とほとんど変わりません。

配列の要素数をここで決めるために『[]』の中に要素数を記述します。

1つ目の『[]』には1次元目の要素数を、2つ目の『[]』の中には2次元目の要素数を記述します。
例のように記述した場合には下記の図のような配列が生成されることになります。

宣言と生成を一文で記述する

多次元配列でも、1次元配列と同じように宣言と生成を1文で記述することが可能です。

【構文】

データ型[] [] 配列変数名 = new データ型[要素数] [要素数] ;

(例)int[][] numbers = new int[3][5];

多次元配列に値を代入する

多次元配列の生成が出来るようになったので、値の代入の仕方のご紹介に入りましょう。
1次元配列ではインデックスで代入する場所を指定したように、多次元配列でもインデックスで代入する場所を指定します。

【構文】

配列変数名[インデックス][インデックス] = 値;

(例)numbers[0][0] = 3;

構文は2次元配列に値を代入する場合の例になっています。
1つ目の『[]』では1次元目の何番目なのかを、2つ目の『[]』では2次元目の何番目なのかを指定します。
インデックスは1番目が『0』からスタートすることには改めて注意をしましょうね。

構文の例だと1次元目の1番目に保管されている配列の1番目に『3』を代入することを指定していますので、図で場所を確認すると下の図のようになります。

これをコードに直すと下記のようなサンプルになります。
サンプルでは上の図の配列すべての保管場所に3を代入しています。

int[][] numbers = new int[3][5];

numbers[0][0] = 3;
numbers[0][1] = 3;
numbers[0][2] = 3;
numbers[0][3] = 3;
numbers[0][4] = 3;

numbers[1][0] = 3;
numbers[1][1] = 3;
numbers[1][2] = 3;
numbers[1][3] = 3;
numbers[1][4] = 3;

numbers[2][0] = 3;
numbers[2][1] = 3;
numbers[2][2] = 3;
numbers[2][3] = 3;
numbers[2][4] = 3;

1行目で配列の初期化を行っている個所では『new int[3][5]』となっているので、『numbers[3][5]』まで使えるような気がしますが、『new int[3][5]』の部分で指定しているのは要素数であってインデックスではないことには改めて注意しましょう。

多次元配列の値を取得する

多次元配列から値を取り出したいときは、代入の時と同じようにインデックスで取り出したい場所を指定します。

【サンプル】

int[][] numbers = new int[3][5];

numbers[0][1] = 3;
System.out.println("numbers[0][1]の値は" + numbers[0][1] + "です");

【実行結果】

以上で、多次元配列の紹介は終わりとなります。

インデックスについて分かっていた気になっても、多次元になったら混乱したという方もいらっしゃるかもしれませんね。
その場合はもう一度配列のトピック内に記載してあるインデックスについての説明を読み直してみるといいと思います。

インデックス以外にも多次元配列は少々混乱しやすい構造と考え方になっているかと思いますので、焦らずゆっくり慣れていきましょう。