【Java】Vectorで2次元配列を扱う方法まとめ|初心者向けサンプル付き解説

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

Javaで「2次元配列」を扱うとき、
Vectorを使うと動的に要素を追加・削除できる柔軟な実装が可能です。
特に、サイズが決まっていない表データやリスト構造を扱う場合に便利です。

この記事では、Vectorを使って2次元配列を表現する方法を、
基本例から実務的な応用例までサンプル付きでわかりやすく解説していきます。


Vectorとは

Vectorは、Javaの可変長配列を扱うクラスです。
通常の配列(int[][]など)と違い、要素数を自由に増減できる点が特徴です。

ただし、近年ではArrayListの方がよく使われるため、
Vectorレガシー寄りのコレクションとして扱われます。
それでも、**スレッドセーフ(同期化されている)**という特性があるため、
マルチスレッド環境では今でも利用価値があります。


Vectorで2次元配列を表現する基本例

まずは、Vectorを使って2次元配列のような構造を作る
基本的な方法を見ていきましょう。

サンプルコード①:基本的な使い方

import java.util.Vector;

public class Vector2DExample {
    public static void main(String[] args) {
        // 2次元配列のように扱う
        Vector<Vector<Integer>> matrix = new Vector<>();

        // 行を追加
        for (int i = 0; i < 3; i++) {
            Vector<Integer> row = new Vector<>();
            for (int j = 0; j < 3; j++) {
                row.add(i * j);  // 値を代入
            }
            matrix.add(row);
        }

        // 表示
        for (Vector<Integer> row : matrix) {
            System.out.println(row);
        }
    }
}

実行結果

[0, 0, 0]
[0, 1, 2]
[0, 2, 4]

このように、Vector<Vector<T>> の形で宣言することで、
2次元配列のような構造を実現できます。

ポイント

  • matrixは「行の集合」、rowは「列の集合」を表します。
  • Vectorは動的にサイズを変更できるため、
    row.add()matrix.add()で簡単に要素を追加できます。

実務で使える応用例(表データの管理)

次に、もう少し実践的な例として、「表データ」を
Vectorで管理するケースを見てみましょう。

サンプルコード②:表データの管理例

import java.util.Vector;

public class TableExample {
    public static void main(String[] args) {
        Vector<Vector<String>> table = new Vector<>();

        // 見出し
        Vector<String> header = new Vector<>();
        header.add("ID");
        header.add("名前");
        header.add("年齢");
        table.add(header);

        // データ行
        Vector<String> row1 = new Vector<>();
        row1.add("001");
        row1.add("佐藤");
        row1.add("25");
        table.add(row1);

        Vector<String> row2 = new Vector<>();
        row2.add("002");
        row2.add("鈴木");
        row2.add("30");
        table.add(row2);

        // 表示
        for (Vector<String> row : table) {
            System.out.println(String.join("\t", row));
        }
    }
}

実行結果

ID	名前	年齢
001	佐藤	25
002	鈴木	30

解説

このように、Vector<Vector<String>>を使えば、
Excelのような行列データを簡単に表現できます。
実務でも、CSVデータの取り込みやテーブル形式の情報を扱う場合に応用可能です。


ArrayListとの違いと代替手法

実は、最近のJavaではVectorよりもArrayListが主流です。

サンプルコード③:ArrayListを使った同等処理

import java.util.ArrayList;
import java.util.List;

public class ArrayList2DExample {
    public static void main(String[] args) {
        List<List<Integer>> matrix = new ArrayList<>();

        for (int i = 0; i < 3; i++) {
            List<Integer> row = new ArrayList<>();
            for (int j = 0; j < 3; j++) {
                row.add(i + j);
            }
            matrix.add(row);
        }

        for (List<Integer> row : matrix) {
            System.out.println(row);
        }
    }
}

実行結果

[0, 1, 2]
[1, 2, 3]
[2, 3, 4]

Vectorとの違い

項目VectorArrayList
スレッドセーフ○(同期化されている)×(非同期)
パフォーマンスやや低い高速
推奨度古いが安全現在の主流

マルチスレッド環境でデータ競合が発生する可能性がある場合はVector
そうでない場合はArrayListの方がシンプルで高速です。


よくあるミスと注意点

Vectorの初期容量指定を忘れる

Vector<Integer> v = new Vector<>(10);

このように初期容量を指定しておくと、
要素追加時の再割り当てコストを抑えられます。

Vectorの同期化を過信しない

Vectorはメソッド単位で同期化されているだけなので、
複数のスレッドが同時に複雑な操作(add/removeの混在など)を行う場合は、
外部でsynchronizedブロックを使って保護する必要があります。

Vectorとプリミティブ型の扱い

Vectorにはオブジェクトしか格納できません。
そのため、intdoubleを扱う際は自動的に
ラッパークラス(Integer, Doubleなど)に変換されます。


関連記事

以下の記事もあわせて読むと、2次元配列やコレクション構造の理解がより深まります。


まとめ

Vectorを使えば、2次元配列のような構造を柔軟に扱うことができます。
特に、要素数が可変なデータ構造やスレッドセーフな処理を行いたい場合に有効です。

一方で、最近のJavaではArrayListの方が主流であり、
用途に応じてVectorArrayListを使い分けるのがポイントです。

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