Vector と Enumaration

Vectorクラスの利用法と配列との比較、 Enumarationインターフェイスの意味を解説します。
java.utilパッケージの Vectorクラスは、 複数のオブジェクトを集め、 インデックス番号で操作できるようにしたクラスです。 目的や利用法は配列と似ています。 ただし、以下のような大きな相違点があります。

  1. 配列は同じ種類のデータ(原始型もしくはクラスのオブジェクト)の集まりで なくてはいけません。これに対して Vectorクラスの要素は、異なるクラスの オブジェクトが混在してかまいません。
  2. 配列は生成した時点でサイズを指定する必要があり、途中でサイズを変更できません。 これに対して Vectorクラスは途中でサイズを変更することができます。
  3. 配列では一度定まったインデックスの値は固定です。 これに対して Vectorクラスは順番の途中に新しい要素を挿入したり、 不要な要素を途中から削除して「順番を詰める」ことができます。
このように、Vectorは配列に比べて柔軟な取り扱いが可能です。 また、ファイルから不特定の個数のデータを読み込むような処理の場合は、 配列ではうまく処理できないので Vectorが利用されます。
理論的には配列の機能をすべて Vectorで記述することもできますが、 それはあまり現実的ではないでしょう。 当然のことながら処理の効率の面では Vectorは配列に劣ります。 また、プログラム内の記述も配列に比べて煩雑になります。 同じような機能を配列と Vectorで記述した例を比較してみましょう。


//配列
Point points[] = new Point[10];
for( int i=0; i<10; i++ )
     points[i] = new Point( i, 0 );
System.out.println( points[8].toString() );

//Vector
Vector vector = new Vector();
for( int i=0; i<10; i++ )
     vector.addElement( new Point( i, 0 ) );
System.out.println( vector.ElementAt(8).toString() );

Enumerationインターフェイスは、単連結リストのデータ構造を提供します。 具体的には nextElement()メソッドと hasMoreElement()メソッドを実装する ことを要求しています。 Vectorも Enumerationを実装したオブジェクトを内部で利用しています。 Propetiesクラスのキー名のリストも Enumerationを実装したオブジェクトと して返されます。