お疲れ様です。はるさらと申します。
Javaで配列を扱う際、2次元配列から1次元配列に
データを代入したい場面は意外と多くあります。
例えば、表形式のデータを横一列に並べ替えたい場合や、
部分的に抽出したい場合などです。
本記事では「java 2次元配列 1次元配列 代入」をキーワードに、
経験の浅い方でも理解できるよう、具体例を交えながら解説していきます。
2次元配列と1次元配列の基本
まずは、2次元配列と1次元配列の違いを簡単に整理しておきます。
- 1次元配列:要素が直線的に並んだ配列。例:
int[] arr = {1,2,3}; - 2次元配列:配列の中に配列を持つ、いわゆる「表形式」のデータ。
例:int[][] arr = {{1,2},{3,4}};
2次元配列は「行」と「列」で管理されるため、
1次元配列に変換するときは「どの行を取り出すか」
または「全体をまとめるか」を意識する必要があります。
2次元配列の1行を1次元配列に代入する方法(基本例)
最もシンプルな方法は、2次元配列の「特定の行」をそのまま1次元配列に代入する方法です。
サンプルコード
public class ArrayExample {
public static void main(String[] args) {
int[][] array2d = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 2行目(インデックス1)を1次元配列に代入
int[] row = array2d[1];
// 結果表示
for (int num : row) {
System.out.print(num + " ");
}
}
}
実行結果
4 5 6
このように、array2d[1] と書くだけで2次元配列の1行を取り出せます。
ポイントは「代入されるのは参照そのもの」であるため、
元の配列を変更すると1次元配列の値も変わる点です。
2次元配列のすべての要素を1次元配列にコピーする方法(実務利用例)
表形式のデータを一列に並べたい場合、
ループ処理で全要素をコピーします。
サンプルコード
import java.util.Arrays;
public class FlattenArray {
public static void main(String[] args) {
int[][] array2d = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 要素数を計算
int rows = array2d.length;
int cols = array2d[0].length;
int[] array1d = new int[rows * cols];
// コピー処理
int index = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
array1d[index++] = array2d[i][j];
}
}
System.out.println(Arrays.toString(array1d));
}
}
実行結果
[1, 2, 3, 4, 5, 6, 7, 8, 9]
この方法は「フラット化(flatten)」とも呼ばれます。
特にファイル出力や外部システムへの渡し方によっては
「1次元に並べ替えて渡す」のが一般的です。
System.arraycopyを使った代替手法(比較)
ループでコピーする代わりに、System.arraycopy を利用すると効率的です。
サンプルコード
import java.util.Arrays;
public class ArrayCopyExample {
public static void main(String[] args) {
int[][] array2d = {
{10, 20, 30},
{40, 50, 60},
{70, 80, 90}
};
int[] array1d = new int[array2d.length * array2d[0].length];
int index = 0;
for (int i = 0; i < array2d.length; i++) {
System.arraycopy(array2d[i], 0, array1d, index, array2d[i].length);
index += array2d[i].length;
}
System.out.println(Arrays.toString(array1d));
}
}
実行結果
[10, 20, 30, 40, 50, 60, 70, 80, 90]
System.arraycopy を使うと、
ネストしたforループを1行で置き換えられるため、
コードがスッキリします。速度面でもメリットがあります。
注意点とよくあるミス
- 要素数を間違える
1次元配列を作成する際、要素数をrows * colsで計算しないとArrayIndexOutOfBoundsExceptionが発生します。 - ジャグ配列の場合の注意
Javaの2次元配列は「配列の配列」なので、
行ごとに列数が異なるケース(ジャグ配列)が存在します。
その場合、単純にarray2d[0].lengthを使うとエラーになるので、
行ごとに列数を確認しましょう。
まとめ
- 2次元配列から1次元配列に代入する方法は大きく分けて3つある
- 特定の行を代入する(基本例)
- ループで全要素をコピーする(実務利用例)
System.arraycopyで効率的にコピーする(代替手法)
- 実際のシーンでは「データの用途」に応じて方法を選ぶことが大切
- ジャグ配列のように列数が不均一なケースは特に注意
どなたかのお役に立てば幸いです。
それではまたー!




































