この記事の目次
1. 2次元配列
今まで習って来た配列は1次元配列と言います。1次元配列に縦の並びを加えると2次元配列になります。;違う言い方だと、2次元配列は配列の配列です。配列の各要素に配列を代入するのです。
● 宣言
* 各行の列数が同じ場合:
型名[][] 配列名 = new 型名[行数][列数];
* 各行の列数は同じ数値でなく、別々に宣言したい場合:
型名[][] 配列名 = new 型名[行数][]; 配列名[0] = new 型名[行0の列数]; 配列名[1] = new 型名[行1の列数]; ・・・・ = ・・・・
● 宣言と同時に初期化する
型名[][] 配列名 = {{値11, 値12, ・・・}, {値22, 値22, ・・・}, ・・・};
上の初期化で。以下のような行列に表されます。
値11 値12 値13 ... 値21 値22 値23 ... 値31 値32 値33 ... . . .
package helloworld; import java.util.Arrays; public class HelloWorld { public static void main(String[] args) { // 2次元の配列の宣言と初期化 int[][] array = {{1,2,3},{4,5,6},{7,8,9}}; //Arrays.deepToStringメソッドで配列を表示する。 System.out.println(Arrays.deepToString(array)); } }
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
● 各要素にアクセスする
2次元の配列変数から値を取り出すためには、縦方向と横方向のふたつのインデックスで引き出します。
配列名[行番号][この行の列番号] = 値;
配列の各要素にアクセスして初期化する
package helloworld; import java.util.Arrays; public class HelloWorld { public static void main(String[] args) { // 2次元の配列の宣言 int[][] array = new int[3][3]; //配列の各要素にアクセスして初期化する for(int i = 0; i<3 ; i++){ for (int j = 0; j<3 ; j++){ array[i][j] = i*3 + j; } } System.out.println(Arrays.deepToString(array)); } }
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
2. 多次元配列
3次元配列は2次元配列に次元がもうひとつ加わる配列。つまり縦と横に高さが加わるとイメージすればいいです。3次元以上の配列は多次元配列と言います。
● 宣言
型名[][]... 配列変数名 = new 型名[配列の要素数][配列の要素数]...;
● 宣言と同時に初期化する
例えば、3次元配列の場合:
型名[][][] 配列名 = {{{値11, 値12, ・・・}, {値22, 値22, ・・・},・・・}, ・・・};
package helloworld; import java.util.Arrays; public class HelloWorld { public static void main(String[] args) { // 3次元の配列の宣言と初期化 int[][][] array = {{{1,2,3},{1,2,3}},{{1,2,3},{1,2,3}}}; System.out.println(Arrays.deepToString(array)); } }
[[[1, 2, 3], [1, 2, 3]], [[1, 2, 3], [1, 2, 3]]]
● 配列の各要素にアクセスする
配列名[配列番号][配列番号]...[要素番号] = 値;
package helloworld; import java.util.Arrays; public class HelloWorld { public static void main(String[] args) { // 2次元の配列の宣言 int[][][] array = new int[2][3][2]; int x = 0;//要素の値 //配列の各要素にアクセスして初期化する for(int i = 0; i<2 ; i++){ for (int j = 0; j<3 ; j++){ for (int k = 0; k<2 ; k++){ array[i][j][k] = x; //array配列のi番目の行のj番目の列のk番目の要素にxを代入する x++; } } } System.out.println(Arrays.deepToString(array)); } }
[[[0, 1], [2, 3], [4, 5]], [[6, 7], [8, 9], [10, 11]]]
3. 多次元配列の長さ
(n) 次元配列の長さ:配列名.length (n - 1) 次元配列の長さ:配列名[インデックス番号].length (n - 2) 次元配列の長さ:配列名[インデックス番号][インデックス番号].length . . .
package helloworld; import java.util.Arrays; public class HelloWorld { public static void main(String[] args) { // 2次元の配列の宣言 int[][][] array = new int[2][3][2]; int x = 0;//要素の値 //配列の各要素にアクセスして初期化する for(int i = 0; i<2 ; i++){ for (int j = 0; j<3 ; j++){ for (int k = 0; k<2 ; k++){ array[i][j][k] = x; //array配列のi番目の行のj番目の列のk番目の要素にxを代入する x++; } } } System.out.println(Arrays.deepToString(array)); System.out.println("1次元の長さ:" + array.length); System.out.println("2次元の長さ:" + array[0].length); System.out.println("3次元の長さ:" + array[0][0].length); } }
[[[0, 1], [2, 3], [4, 5]], [[6, 7], [8, 9], [10, 11]]] 1次元の長さ:2 2次元の長さ:3 3次元の長さ:2
4. まとめ
ここまではJAVAの多次元配列をだいたいお分かりになりましたでしょうか。多次元と言いながら、開発現場では多くても、2次元までしか使いません。それに、3次元を使うより、LISTを使った方は楽で、LISTの要素を扱うメソットも多く用意してあります。是非ArrayListを見ておいてください。
JAVAのArrayListについて詳しく見たい方:
JAVAのArrayList ../../../java/java-collection-arraylist.html この記事ではListを実装したクラスの一つであるArrayListを紹介します。ArrayListは大きさが可変という点でたくさんの応用があるので、開発現場でよく・・・ |
5. 演習問題
JAVAの多次元配列の演習問題