お疲れ様です。はるさらと申します。
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との違い
| 項目 | Vector | ArrayList |
|---|---|---|
| スレッドセーフ | ○(同期化されている) | ×(非同期) |
| パフォーマンス | やや低い | 高速 |
| 推奨度 | 古いが安全 | 現在の主流 |
マルチスレッド環境でデータ競合が発生する可能性がある場合はVector、
そうでない場合はArrayListの方がシンプルで高速です。
よくあるミスと注意点
Vectorの初期容量指定を忘れる
Vector<Integer> v = new Vector<>(10);
このように初期容量を指定しておくと、
要素追加時の再割り当てコストを抑えられます。
Vectorの同期化を過信しない
Vectorはメソッド単位で同期化されているだけなので、
複数のスレッドが同時に複雑な操作(add/removeの混在など)を行う場合は、
外部でsynchronizedブロックを使って保護する必要があります。
Vectorとプリミティブ型の扱い
Vectorにはオブジェクトしか格納できません。
そのため、intやdoubleを扱う際は自動的に
ラッパークラス(Integer, Doubleなど)に変換されます。
関連記事
以下の記事もあわせて読むと、2次元配列やコレクション構造の理解がより深まります。
まとめ
Vectorを使えば、2次元配列のような構造を柔軟に扱うことができます。
特に、要素数が可変なデータ構造やスレッドセーフな処理を行いたい場合に有効です。
一方で、最近のJavaではArrayListの方が主流であり、
用途に応じてVectorとArrayListを使い分けるのがポイントです。
どなたかのお役に立てば幸いです。
それではまたー!





































