Javaにおける二次元配列 (Two-dimensional Arrays) 完全ガイド
Javaでは、二次元配列は配列の配列として実装され、データを行と列の形式で格納するのに使用されます。この構造は、特に行列計算やグリッド状のデータを扱う際に有用です。この記事では、Javaにおける二次元配列の基本的な使い方から、応用的な技術に至るまで詳細に解説します。
1. 二次元配列の定義
Javaで二次元配列を定義するには、まず配列をどのように格納するかを決める必要があります。二次元配列は、基本的に「配列の配列」です。以下のコードでは、整数型の二次元配列を作成しています。
javaint[][] array = new int[3][4];
このコードでは、3行4列の整数型二次元配列を宣言しています。arrayは3つの行を持ち、それぞれの行には4つの列があります。ここで、配列内の各要素にはデフォルト値として0が自動的に設定されます。
2. 配列の初期化
二次元配列は、宣言時に初期化することもできます。例えば、以下のように初期化を行うことができます。
javaint[][] array = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
このコードでは、3行4列の配列に値を代入しています。それぞれの行に異なる値を設定することで、2D配列内の個々の要素にアクセスできます。
3. 二次元配列の要素にアクセスする方法
二次元配列の要素にアクセスするには、行番号と列番号を指定します。以下の例では、array[1][2]というコードを使用して、2行目(インデックスは0から始まるため、実際には2行目)の3列目の要素にアクセスしています。
javaint value = array[1][2]; // 7を取得
この場合、array[1][2]の値は7となります。
4. 二次元配列の反復処理
二次元配列の各要素にアクセスするためには、forループを使用します。次のコードは、二次元配列の全ての要素を出力する方法を示しています。
javafor (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();
}
このコードでは、外側のループが行を、内側のループが列を担当し、各要素を一つずつ出力します。array.lengthは行数を返し、array[i].lengthはi番目の行の列数を返します。
5. 可変長の二次元配列
Javaでは、各行の列数が異なる「ジャグ配列(Jagged Array)」を作成することができます。これは、各行が異なる長さの配列を持つ二次元配列です。例えば、以下のように定義します。
javaint[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[2]; // 1行目は2列
jaggedArray[1] = new int[3]; // 2行目は3列
jaggedArray[2] = new int[4]; // 3行目は4列
このように、行ごとに列数を自由に設定することができます。
6. 配列のコピー
Javaで配列をコピーするには、System.arraycopy()やArrays.copyOf()を使用する方法があります。例えば、以下のコードでは、array1の内容をarray2にコピーしています。
javaint[][] array1 = {
{1, 2, 3},
{4, 5, 6}
};
int[][] array2 = new int[2][3];
System.arraycopy(array1, 0, array2, 0, array1.length);
このコードは、array1の内容をarray2にコピーしています。ただし、System.arraycopy()では、要素のコピーだけが行われるため、二次元配列内の個別のオブジェクト配列を深くコピーする場合は、手動でのコピー処理が必要です。
7. 配列のサイズ変更
Javaでは、配列のサイズを直接変更することはできません。もし配列のサイズを変更したい場合は、新しい配列を作成して既存の要素を新しい配列にコピーする必要があります。例えば、以下のように新しい配列を作成して、既存のデータをコピーする方法があります。
javaint[][] newArray = new int[4][4];
for (int i = 0; i < array.length; i++) {
System.arraycopy(array[i], 0, newArray[i], 0, array[i].length);
}
このコードでは、arrayの内容をnewArrayにコピーしていますが、newArrayのサイズが大きいため、コピーされる要素が全てではなく、新しい配列の初期化後に追加要素を設定できます。
8. 二次元配列の応用
二次元配列は、数値計算やマトリックス演算など、さまざまな応用に使用されます。例えば、行列の加算を行う場合、各要素にアクセスして加算することができます。
javaint[][] matrix1 = {
{1, 2},
{3, 4}
};
int[][] matrix2 = {
{5, 6},
{7, 8}
};
int[][] result = new int[2][2];
for (int i = 0; i < matrix1.length; i++) {
for (int j = 0; j < matrix1[i].length; j++) {
result[i][j] = matrix1[i][j] + matrix2[i][j];
}
}
この例では、matrix1とmatrix2という2つの行列を加算し、その結果をresultに格納しています。
結論
Javaにおける二次元配列は、複雑なデータ構造を管理するために非常に有用です。基本的な使い方から応用的な技術まで理解し、適切に使用することで、さまざまな問題を効率よく解決することができます。これらの技術をマスターすることで、プログラミングのスキルを向上させることができます。
