【はじめてのJava】多次元配列【配列とArrayList編】
はじめてのJava
このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。
目次
多次元配列
配列に格納するデータを1つのインデックスで格納する場合を1次元配列といい、2つでは2次元配列と呼びます。そして、2つ以上のインデックスで管理する配列のことをまとめて多次元配列と呼びます。
多次元配列は、配列の中に配列を作っていく方法で実現されています。
多次元配列については以下の図をイメージすると良いでしょう。
図は2次元配列を表しています。
多次元配列の宣言
多次元配列も基本的な部分は以前解説した配列の宣言と変わりありません。
2次元配列を宣言する場合は、
データ型[][] 配列名;
3次元配列を宣言する場合は、
データ型[][][] 配列名;
のように、次元の数だけ[]を記述するだけで多次元配列は宣言することが出来ます。
配列を宣言した後は、配列の生成を行います。
2次元配列の生成を行う場合は、
配列名 = new データ型[要素数n][要素数m]
と記述します。
例えば、int型のデータを格納する2次元配列arrayを宣言し生成する場合は、
int[][] array; array = new int[n][m];
のように記述します。
このように記述することで以下のような2次元配列が生成されます。
また、多次元配列の宣言と生成は、
データ型[][] 配列名 = new データ型[要素数n][要素数m];
のように1行で記述することもできます。
生成した配列に値を代入する場合、
配列名[0][0] = 値; 配列名[0][1] = 値; (略) 配列名[0][m-1] = 値; 配列名[1][0] = 値; (略) 配列名[n-1][m-1] = 値;
のように記述していきます。
配列名[0][0]や配列名[0][1]のように記述することで多次元配列の中の一要素を指定することが出来ます。
多次元配列の初期化
多次元配列の宣言・生成・代入を見てきましたが、これらをまとめて行うことが出来ます。
構文は以下の通りです。
データ型[][] 配列名 = { {値1,値2,…}, {値2,値3,…} };
のように記述します。
多次元配列におけるlength
多次元配列でも1次元配列のようにlengthを使用して多次元配列の各要素の長さを取得することが出来ます。
二次元配列でlengthを使う場合以下のように使います。
array.length array[0].length array[1].length
上記のように記述することで、様々な値を取得することが出来ます。
二次元配列でlengthを使った際に取得できる値は以下の図のように対応しています。
多次元配列とfor文
多次元配列とfor文を組み合わせることで、2次元配列の全要素を取り出すことが出来ます。
以下のサンプルコードについて見てみましょう
public class Sample { public static void main(String[] args) { int[][] array = { {1,2,3}, {4,5,6}, {7,8,9} }; for(int i = 0; i < array.length; i++) { for(int j = 0; j < array[i].length; j++){ System.out.print(" " + array[i][j]); } System.out.println(); } } }
実行結果
上記のサンプルコードでは3×3の二次元配列を定義し、その配列についてfor文で繰り返し処理を実行しています。
for文を2重にし、外側のfor文で1次元目の配列の要素を取り出し、2つ目の配列で2次元目の配列の要素を一つずつ取り出しています。
処理の順序としては、
①1行に2次元目のある配列に格納されている要素を全て出力(内側のfor文による繰り返し処理)
②①の処理を実行した後改行する。(外側のfor文のSystem.out.println)
③一連の処理をすべての要素について実行(外側のfor文による繰り返し処理)
という順で処理を実行しています。
以上の処理によって、多次元配列に格納された9個の値すべてを取り出すことが出来ています。
二つのfor文のカウンタ変数に使われているi,jはそれぞれ以下の図のように対応しています。
ポイント
・for文を活用することで、多次元配列の全ての要素を取り出すことが出来る。