【Java】2次元配列から1次元配列へ代入する方法まとめ|初心者向けサンプル付き解説

お疲れ様です。はるさらと申します。

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 で効率的にコピーする(代替手法)
  • 実際のシーンでは「データの用途」に応じて方法を選ぶことが大切
  • ジャグ配列のように列数が不均一なケースは特に注意

どなたかのお役に立てば幸いです。
それではまたー!