基本型の配列には、要素として値を入れます。参照型の配列には、要素として参照を入れます。この「配列に入れる参照」には、「配列の参照」も指定できます。
こうやって作った入れ子構造の配列のことを「多次元配列」と呼びます。また、入れ子になっていることを「ネスト」していると呼びます。
そういった配列の入れ子構造を利用することで、エクセルなどの表計算ソフトのような表構造のデータを作成することができます。
表計算ソフトのような表構造は縦と横に軸を持つ2次元のデータです。こういった配列を「2次元配列」と呼びます。
さらに軸を増やすことで、「3次元」「4次元」と拡張していくことができます。
最もよく使われる多次元配列は、2次元配列です。ここでは2次元配列の作り方を示します。
int[][] a2d = new int[4][3]; for (int y = 0; y < 3; y ++) { for (int x = 0; x < 4; x ++) { a2d[x][y] = (x+1) * 10 + (y+1); } }
2次元配列は「int[ ][ ]」のように「[ ]」を2つ付けることで変数を宣言します。また、実際の配列は「new int[4][3]」のようにして作成します。この時、最初の「[4]」が、1次元目の要素数、次の「[3]」が2次元目の要素数になります。
この配列の要素には、「a2d[0][0]」のように2つの添え字を指定することでアクセスできます。
for (int y = 0; y < 3; y ++) { for (int x = 0; x < 4; x ++) { System.out.print(a2d[x][y] + ","); } System.out.println(""); }
101,201,301,401, 102,202,302,402, 103,203,303,403,
2次元配列ではそれほどではないですが、高次の多次元配列を作るとメモリを非常に消費します。
たとえば、各次元が要素数100の2次元配列では、要素数100×100で、10,000(1万)要素分のメモリを消費します。
これが3次元配列の場合は、要素数100×100×100で、1,000,000(100万)要素分のメモリを消費します。4次元配列の場合は、要素数100×100×100×100で、100,000,000(1億)要素分のメモリを消費します。
メモリを多く使うと、コンピュータの動作が重くなります。
そのため、高次の多次元配列を作る場合には、少し考えて、データの持ち方を工夫するようにした方がよいです。
配列では、先に変数だけ宣言しておき、後で配列を初期化することができました。
int[] a; a = new int[4];
同じように、多次元配列も、先に変数だけ宣言しておき、後で配列を初期化することができます。
int[][] a2d = new int[3][]; // この時点ではa2d[0]、a2d[1]、a2d[2]はnull // それぞれの位置に、要素数3の配列の参照を入れる a2d[0] = new int[3]; // a2d[0]の位置 a2d[1] = new int[3]; // a2d[1]の位置 a2d[2] = new int[3]; // a2d[2]の位置
この際、2次元目以降の各配列の要素数を個別に変えることも可能です。
int[][] a2d = new int[3][]; a2d[0] = new int[1]; a2d[1] = new int[3]; a2d[2] = new int[2]; for (int i = 0; i < a2d.length; i ++) { System.out.println(a2d[i].length); }