【Java】2次元配列に要素を追加する方法まとめ|初心者向けサンプル付き解説

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

Javaでプログラムを書くとき、
2次元配列に要素を追加したいと考えることがあります。
しかし、Javaの配列はサイズが固定されているため、
単純に「追加」という操作はできません。

そのため、経験の浅い方は「どうやって新しい行や列を増やせばいいのか」
つまずくケースが多いです。

この記事では、Javaの2次元配列に要素を追加する方法をサンプルコード付きで解説します。
基本的な方法から実務で使える書き方、代替手法まで幅広く取り上げますので、
ぜひ参考にしてください。


Javaの配列はサイズ固定という前提を理解する

最初に押さえておくべきことは、
Javaの配列はサイズ固定という点です。
つまり、一度宣言した配列に直接「新しい行や列を追加」することはできません

例えば次のコードはできません。

int[][] arr = new int[2][2];
// arr に新しい行を直接追加することは不可

そのため、2次元配列に要素を追加する場合は以下のような工夫が必要です。

  • 新しい配列を作り直してコピーする
  • ArrayListなどの可変長コレクションを使う

この違いを理解しておくと、状況に応じて最適な方法を選べます。


基本例:新しい配列を作ってコピーする方法

まずは、最もシンプルな「配列を拡張する方法」を紹介します。
新しい配列を作り、既存のデータをコピーし、新しい要素を追加する形です。

import java.util.Arrays;

public class ArrayAddExample {
    public static void main(String[] args) {
        int[][] arr = {
            {1, 2},
            {3, 4}
        };

        // 新しい行を追加
        int[][] newArr = Arrays.copyOf(arr, arr.length + 1);
        newArr[arr.length] = new int[]{5, 6};

        // 確認出力
        for (int[] row : newArr) {
            System.out.println(Arrays.toString(row));
        }
    }
}

実行結果:

[1, 2]
[3, 4]
[5, 6]

この方法では、新しい配列を作ってから代入することで、
結果的に「追加」と同じ動作を実現しています。


実務利用例:設定データの動的追加

実務では、ユーザー入力や外部ファイルの読み込み結果を
2次元配列としてまとめたいケースがあります。
例えば、社員データをCSVから読み込み、1行ずつ追加していくイメージです。

import java.util.Arrays;

public class EmployeeAdd {
    public static void main(String[] args) {
        String[][] employees = {
            {"001", "田中", "営業"},
            {"002", "佐藤", "開発"}
        };

        // 新しい社員データを追加
        String[][] updated = Arrays.copyOf(employees, employees.length + 1);
        updated[employees.length] = new String[]{"003", "鈴木", "総務"};

        // 出力確認
        for (String[] emp : updated) {
            System.out.println(Arrays.toString(emp));
        }
    }
}

実務では配列のコピー処理を関数化して使い回すと便利です。
ただし、データ数が多い場合には処理コストがかかるため注意が必要です。


代替手法:ArrayListを使って柔軟に追加する

「追加」処理を多用する場合は、ArrayListやList<List<>>
使う方が実務では圧倒的に便利です。
ArrayListはサイズ可変なので、add()を使って簡単に行を増やせます。

import java.util.*;

public class ListAddExample {
    public static void main(String[] args) {
        List<List<String>> employees = new ArrayList<>();
        employees.add(Arrays.asList("001", "田中", "営業"));
        employees.add(Arrays.asList("002", "佐藤", "開発"));

        // 新しい行を追加
        employees.add(Arrays.asList("003", "鈴木", "総務"));

        // 出力確認
        for (List<String> emp : employees) {
            System.out.println(emp);
        }
    }
}

ArrayListを使うと、配列コピーの手間がなく、
追加・削除・更新が直感的に扱えるのが強みです。
実務ではこちらの方法を使うことが多いでしょう。


注意点:経験の浅い方が間違えやすいポイント

2次元配列の追加処理でよくある間違いをまとめます。

  1. 配列に直接追加しようとする
    Javaの配列は固定長のため、arr.add(...)のような操作はできません。
    新しい配列を作るか、ArrayListを使う必要があります。
  2. コピー時の行数・列数の扱いに注意
    Arrays.copyOf()で新しい行を追加する際、
    要素を正しく代入しないとnullが残るケースがあります。
  3. ArrayListと配列の違いを混同する
    配列はarr[i][j]でアクセス、リストはlist.get(i).get(j)でアクセスします。
    使い方を混同するとエラーにつながります。

関連記事

同じくJavaの配列や2次元配列の使い方を解説した記事もありますので、
合わせて参考にしてください。


まとめ

  • Javaの配列はサイズ固定なので、直接追加はできない
  • 新しい配列をコピーして追加する方法が基本
  • 実務ではArrayListなど可変長コレクションを使う方が便利
  • コピー処理やアクセス方法の違いに注意

経験の浅い方は、まずは「配列は固定長」という前提を理解し、
用途に応じて「コピー」か「ArrayList」を選べるようになると
ステップアップしていけます。

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