Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのVectorクラス徹底解説:使い方とArrayListとの違い

JavaのVectorクラス徹底解説:使い方とArrayListとの違い

Javaには、特定の種類のデータを格納するためのさまざまなクラスが用意されています。それぞれのクラスには独自の特徴があり、どのクラスを使うかによってデータへのアクセス方法や操作方法が決まります。

その中でも重要なクラスのひとつがVectorクラスです。VectorはListインターフェースの実装であり、サイズ変更可能な配列(可変長配列)を作成するために使用されます。

この記事では、サンプルコードを交えながら、JavaでVectorクラスを使って可変長配列を作成する方法を解説します。さらに、Vectorと非常によく似ているArrayListクラスとの違いについても取り上げます。

JavaのListインターフェースとは

Listインターフェースは、Javaで順序付きのデータ集合を作成するために使われます。たとえば、靴店で販売された靴のリストや、銀行に勤務する全従業員の名前のリストなどをListで表現できます。

ただし、Listはインターフェースであるため、直接オブジェクトを生成することはできません。リストを作成したい場合は、Listインターフェースを実装している次のいずれかのクラスを使用する必要があります。

  • ArrayList
  • LinkedList
  • Vector
  • Stack

この記事では、これらの中からVectorクラスに焦点を当て、JavaでListオブジェクトを作成する方法を詳しく見ていきましょう。

JavaのVectorクラスの基本

VectorはListインターフェースを利用して、サイズ変更可能な配列を作成します。Javaでベクターを作成するには、次の構文を使用します。

Vector<データ型> ベクター名 = new Vector<>();

この構文の各要素を分解して見てみましょう。

  • Vector:ベクターを宣言することをプログラムに伝えます。
  • データ型:ベクターに格納するデータの型を指定します。
  • ベクター名:作成するベクターの名前です。
  • new Vector<>();:新しいベクターを生成し、変数に代入します。

たとえば、百貨店で販売しているランプの色をすべて格納するベクターを宣言したいとしましょう。その場合は、次のようにコードを書きます。

Vector<String> lamp_colors = new Vector<>();

これで、百貨店で販売するランプの色をすべて格納できる「lamp_colors」というベクターが作成されました。

Vectorクラスの主なメソッド

JavaのVectorクラスには、ベクターに格納されたデータを取得・操作するためのメソッドが多数用意されています。ここでは、特に重要なメソッドをいくつか紹介します。

要素を追加する

ベクターに要素を追加するには、主に2つのメソッドがあります。用途に応じて使い分けましょう。

add()メソッドで要素を追加する

add()メソッドは、ベクターに要素を追加するために使用します。構文は次のとおりです。

add(index, elementName);

add()メソッドは2つのパラメータを受け取ります。

  • index:要素を挿入する位置(インデックス値)
  • elementName:追加したい要素

ベクターの末尾に要素を追加する場合は、indexパラメータを省略できます。

それでは、百貨店チェーンを運営していて、新しい家具ラインで販売するデスクランプの色のリストを作成している場面を想定してみましょう。メーカーから「次回の注文にオレンジと青のランプが含まれる」と連絡があったため、この2色をリストに追加したいと思います。

import java.util.Vector;

class Main {
	public static void main(String[] args) {
		Vector<String> lamp_colors = new Vector<>();
		
		lamp_colors.add("Orange");
		lamp_colors.add("Blue");

		System.out.println("Vector: " + lamp_colors);
	}
}

実行結果:

Vector: [Orange, Blue]

このように、OrangeBluelamp_colorsベクターに追加されました。

次に、メーカーからグレーのランプも納品すると連絡があったとします。グレーのランプは他の色より人気が出ると予想されるため、リストの先頭に追加したい場合はどうすればよいでしょうか。先ほどのコードに次の1行を加えます。

import java.util.Vector;

class Main {
	public static void main(String[] args) {
		Vector<String> lamp_colors = new Vector<>();
		
		lamp_colors.add("Orange");
		lamp_colors.add("Blue");
		lamp_colors.add(0, "Gray");

		System.out.println("Vector: " + lamp_colors);
	}
}

実行結果:

Vector: [Gray, Orange, Blue]

この例では、add()メソッドを使ってGraylamp_colorsベクターに追加しています。インデックスとして0を指定することで、Grayがインデックス0の位置、つまりベクターの先頭に追加されます。その後、プログラムにベクター全体を出力させています。

addAll()メソッドでベクターを結合する

addAll()メソッドは、あるベクターの全要素を別のベクターに追加するために使用します。

たとえば、「カラー範囲」と「ランプの色」という2つのリストがあるとします。ランプのメーカーから「カラー範囲内のすべての色でランプを製造できる」と告げられたため、この2つのリストを結合したいとしましょう。次のコードで実現できます。

import java.util.Vector;

class Main {
	public static void main(String[] args) {
		Vector<String> color_range = new Vector<>();
		Vector<String> lamp_colors = new Vector<>();

		color_range.add("Blue");
		color_range.add("Black");
		color_range.add("Gray");
		color_range.add("Pink");
		color_range.add("Orange");

		lamp_colors.addAll(color_range);

		System.out.println("Color range: " + color_range);
		System.out.println("Lamp colors: " + lamp_colors);
	}
}

実行結果:

Color range: [Blue, Black, Gray, Pink, Orange]
Lamp colors: [Blue, Black, Gray, Pink, Orange]

このコードでは、まずカラー範囲の色をcolor_rangeベクターに追加しています。次にaddAll()メソッドを使って、color_rangeの全色をlamp_colorsベクターに追加しました。最後に、両方のベクターの内容をコンソールに出力しています。

要素を取得する

get()メソッドは、ベクターから特定の要素を取得するために使用します。get()は1つのパラメータ、つまり取得したい要素のインデックス値を受け取ります。

たとえば、ランプの色のリストがアルファベット順に並んでいて、リストの最初の項目を取得したいとしましょう。次のコードで実現できます。

import java.util.Vector;

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

		lamp_colors.add("Black");
		lamp_colors.add("Blue");
		lamp_colors.add("Gray");
		lamp_colors.add("Orange");
		lamp_colors.add("Pink");

		String first_element = lamp_colors.get(0);

		System.out.println("First element in list: " + first_element);
	}
}

実行結果:

First element in list: Black

このコードでは、get()メソッドを使ってlamp_colorsベクターの最初の項目を取得しています。インデックスとして0を指定すると、ベクターの先頭、つまりインデックス0の位置にある要素が取得されます。その後、リストの最初の要素を「First element in list:」というメッセージとともにコンソールに出力しています。

要素を削除する

ベクターから要素を削除するには、remove()removeAll()clear()の3つのメソッドが使えます。

remove()メソッドで単一の要素を削除する

remove()メソッドは、ベクターから1つの要素を削除するために使用します。remove()は、削除したい要素のインデックス位置をパラメータとして受け取ります。

再び百貨店の例に戻りましょう。メーカーから「オレンジ色のランプは製造できなくなった」と通知されたため、販売するランプの色リストからオレンジを削除する必要があります。次のコードで実現できます。

import java.util.Vector;

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

		lamp_colors.add("Black");
		lamp_colors.add("Blue");
		lamp_colors.add("Gray");
		lamp_colors.add("Orange");
		lamp_colors.add("Pink");

		lamp_colors.remove(3);

		System.out.println("New color list: " + lamp_colors);
	}
}

実行結果:

New color list: [Black, Blue, Gray, Pink]

ここでは、remove()メソッドを使って、リストのインデックス3にある要素を削除しています。この場合、その要素の値はOrangeです。その後、更新されたカラーリストを「New color list:」というメッセージとともにコンソールに出力しています。

removeAll()・clear()メソッドですべての要素を削除する

removeAll()メソッドとclear()メソッドは、リストからすべての要素を削除するために使用します。一般的には、より効率的なclear()の使用が推奨されますが、removeAll()メソッドを使うことも可能です。

たとえば、メーカーが事業縮小のためランプの製造を中止することになったとしましょう。新しいメーカーが見つかるまでランプを販売しないため、販売するランプの色をすべて削除することにします。次のコードで実現できます。

import java.util.Vector;

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

		lamp_colors.add("Black");
		lamp_colors.add("Blue");
		lamp_colors.add("Gray");
		lamp_colors.add("Orange");
		lamp_colors.add("Pink");

		lamp_colors.clear();

		System.out.println("New color list: " + lamp_colors);
	}
}

実行結果:

New color list: []

このコードでは、clear()メソッドを使ってlamp_colorsベクター内の全要素を削除しています。最終行では、「New color list:」という文字列に続けて、空になったベクターを出力しています。

VectorとArrayListの違い

ArrayListとVectorはどちらもJavaのListインターフェースを実装しており、提供されるメソッドもほぼ同じです。しかし、両者にはいくつかの重要な違いがあります。

最も注目すべき違いは、Vectorクラスが同期化(synchronized)されているという点です。同期化されているため、一度に1つのスレッドしかコードにアクセスできません。一方、ArrayListは非同期(unsynchronized)であり、複数のスレッドが同時にリストを操作できます。

マルチスレッド環境でスレッドセーフな操作が必要な場合はVectorが適しており、パフォーマンスを優先するシングルスレッド環境ではArrayListが一般的に推奨されます。

その他のVectorメソッド

上記以外にも、ベクター内のデータを操作するためのメソッドがいくつか用意されています。以下に主要なメソッドをまとめました。

メソッド名説明
contains()ベクター内に特定の値が存在するかどうかを検索する
iterator()ベクターを反復処理(イテレート)する
set()ベクター内の要素を変更する
size()ベクターの長さ(要素数)を返す
toArray()ベクターを配列に変換する
toString()ベクターを文字列に変換する

まとめ

Vectorクラスは、JavaでListインターフェースを使ってデータを格納するために使用されます。たとえば、百貨店で販売する商品のリストや、ドラッグストアで取り扱うサプリメントのリストなどをVectorで管理できます。

この記事では、JavaのVectorクラスの基本、ベクターの作成方法、VectorとArrayListの主な違いについて解説しました。さらに、サンプルコードを通じて、ベクターの内容を取得・操作するための主要なメソッドも紹介しました。

これで、あなたもVectorクラスをプロのように使いこなすためのスキルを身につけられました。ぜひ実際の開発で活用してみてください。

  1. 【Android開発】SearchViewの使い方を解説!ListViewの検索・絞り込み機能を実装する手順

    この記事では、AndroidアプリでSearchViewを使用して、ListViewに表示された項目をリアルタイムに検索・絞り込む方法を解説します。SearchViewを活用すれば、少ないコード量で直感的な検索機能をアプリに追加できます。ステップ1:新規プロジェクトの作成Android Studioを起動し、「File」→「New Project」を選択して新しいプロジェクトを作成します。必要な項目をすべて入力してプロジェクトをセットアップしてください。ステップ2:レイアウトファイル(activity_main.xml)の編集res/layout/activity_main.xmlに以下のコー

  2. HTMLのlist属性とは?datalist要素で入力候補を表示する方法を解説

    HTMLのlist属性とはHTMLでは、<datalist>要素を使用して、あらかじめ定義された選択肢のリストを作成できます。このリストは<input>要素(入力欄)に対して適用され、ユーザーが文字を入力すると、定義済みの選択肢が候補として自動的に表示されます。<input>要素のlist属性は、対応する<datalist>要素のidを参照することで、入力欄と選択肢リストを関連付けます。このlist属性は、HTML5で新たに導入された機能です。list属性の基本的な使い方list属性を使うには、以下の2つのステップを行います。<datali