Vectorは、配列によく似ています。どちらも、中味をいれる箱が順番に並んでいる
といったイメージで考えることが出来ます。箱には、1,2,3,..,n と番号がふられて
いて、この番号を添字にして、中味にアクセスすることができるわけです。
ただ、両者には、違いもあります。配列が、配列の宣言の仕方を思いだしてもらえば
すぐに分かるように、同じ型のものしか中味にいれることが出来ないのに対して、
Vectorには、そうした制限が存在しません。
実際には、Vectorは、Object の配列として実現されています。Java では、全ての クラスが、Object クラスを継承していますので、こうしたことが可能となるわけです。
ある Vector v の i 番目に、Object o をセットしたい時には、v.setElementAt(o,i); を、Vector v の j 番目の要素を取り出したいときには、v.elementAt(j); を使い ます。
このメソッドは、あるVector の中に、あるオブジェクトが存在するかを調べて、 存在すれば、そのインデックスを返します。存在しなければ、-1を返します。 こうしたことは、もちろん配列では出来ませんが、同名のメソッドは、Stringクラスの 中にはありましたね。検索開始位置を指定可能なindexOf()があることを含めて、 働きは、Stringクラスのと同じです。同じ様に、lastIndexOf()というメソッドも 用意されています。
addElementは、Vectorのうしろの、まだ要素が入っていない所に、指定された要素を 追加します。インデックスの指定は必要なく、自動的に追加が実行されます。 removeElement は、指定されたインデックスの要素を Vector から削除するのですが、 面白いことに、その時、削除されて空になった部分はそのままに残るのではなく、 後の全ての要素が一つづつ前に繰り上がって、空白を埋めてしまいます。 insertElementAt というメソッドでは、指定されたインデックスに、ある要素が 挿入され、元にあった要素とその後ろの全ての要素は、今度は、後ろに一つづつ 送られることになります。
スタックがどのようなものかは既知とします。Stackは、Vectorを用いて実現されて います。次にその基本的な部分を示します。
public class Stack extends Vector { public Object push(Object item) { addElement(item); return item; } public Object pop() { Object obj; int len = size(); obj = peek(); removeElementAt(len - 1); return obj; } ....... }
基本的な、push , pop に加えて、popしないでスタックの最上部の要素を知る peek や、スタックの中にどの様な要素があるかを検索する search といったメソッド も用意されています。