在Java中,有一個包叫java.util,它是一個保存着各種常用工具類的類庫,其中就包括向量(vector)。向量是一種類似數組的順序存儲的數據結構,但是它的功能比數組強大的多。比如,Vector類的對象是允許不同類型大小的元素共存的變長數組,Vector類的對象不但可以保存數據,而且還封裝了很多方法來操作這些數據;再比如,創建數組時需要事先聲明大小,但Vector不需要,因爲它是可以在運行時動態增長或縮小的,總的來說,相比數組,如下情況更適合使用Vector:
1):需要處理的對象數目不定,序列中的元素都是對象或可以表示爲對象。
2):需要將不同類型的對象組合成一個序列。
3):需要對對象中的元素做頻繁的插入和刪除。
4):經常需要定位序列中的對象或其它查找操作。
5):在不同類之間傳遞大量的數據。
如果上面的不好記,那麼只需這樣想就可以了:當我們的序列內的元素是簡單的內建類型,如int、double等時,那麼我們就使用數組,否則使用Vector。
1、Vector向量類對象的創建
首先介紹Vector向量類常用的構造函數:
第一種
public Vector(); //創建一個響亮對象,默認容量是10個元素。
第二種
public Vector(int initCapacity, int capacityIncrement);
/*這個構造函數的第一個參數initCapacity,表示創建的Vector對象的初始容量【元素數目】;而第二個參數capacityIncrement,表示如果我們創建的這個vector容量不夠了,那麼擴充時應該一次填充多少個多少個元素*/
//比如我們看下面的例子
Vector MyVector = new Vector(100,50);
//上面的代碼意思是,創建一個MyVector向量容器,初始容量爲100個元素,如果在以後的運行中該容器使用完,那麼就以50個元素大小來遞增擴充,比如變成150、200、250等
2、如何對向量容器添加元素
Vector類有兩個方法對向量序列添加元素:
1):
addElement( Object obj ); // 在向量序列的尾部添加新元素。
2):insertElement( Object obj, int index ); // 在向量序列中的指定位置index處插入新元素obj
下面這個就是使用上述兩種方法的例子代碼:
Vector MyVector = new Vector(); //創建了一個10個元素大小的Vector向量容器
for( int i=0; i<100; i++ ){
MyVector.addElement( new MyComplex(0.0, 0.0) ); //其中的MyComplex是我們隨便做的一個複數類
}
MyVector.insertElement( new MyComplex(1.0, 2.0), 50 ); //在這裏我們向第50個位置插入一個新的MyComplex元素
在上面的程序中,我們首先創建一個Vector,裏面啥都沒有,然後在循環體中,我們增加了一百個MyComplex類元素,最後我們又在中間插入一個新元素,所以最後MyVector的大小是101個元素!
3,、修改或刪除向量序列中的元素
如果我們要修改(覆蓋)容器序列中的某個元素,可以參考如下方法:
void setElementAt( Object obj, int index ); //將向量序列中index出的元素改換成obj
如果我們要刪除序列中的某個元素,可以參考這個方法:
void removeElementAt(int index); //產出容器序列中第index出的元素,然後把它後面所有的元素往前挪一個,以便補齊
如果我們要刪除序列容器中和obj相同的元素,可以參考這個方法:
boolean removeElement( Object obj ); //刪除容器序列中第一個與obj相同的元素,然後將後面所有的元素前移,如果沒找到與obj相同的元素,即沒有刪除任何東西,那麼該方法返回FALSE,否則返回TRUE。
如果我們要刪除容器中所有的元素,可以參考如下方法:
void removeAllElement();
比如下面的程序代碼,首先創建一個Vector,然後刪除所有的字符串“to”:
Vector MyVector = new Vector(); //創建一個由10個元素大小的空Vector
for( int i=0; i<10; i++ ){
MyVector.addElement("Welcome");
MyVector.addElement("to");
MyVector.addElement("Java");
}
while( MyVector.removeElement("to") );
常用於查找序列中元素的方法如下:
Object elementAt( int index );
該方法返回指定位置index處的元素,需要注意的是,由於返回的是所有類的父類Object,所以在使用之前通常要進行強制類型轉換,以便將返回的對象引用轉換成我們需要的類型,例如下面的使用例子:
String str = (String)MyVector.elementAt(5); //將第5個元素返回,然後轉換成String賦值給我們的str
boolean contains(Object obj); //看看是否有obj,如果有,返回TRUE,否則返回FALSE
如果我們要從一個指定位置處向後搜索,然後返回找到的第一個obj元素,那麼可以參考如下方法:
int indexOf( Object obj, int start_index ); //其中的start_index,就是我們要開始尋找的位置,如果沒有找到對象obj,那麼該方法返回-1
如果我們要從一個指定位置處向前搜索,然後返回第一個obj元素【即到達指定位置前最後的那個obj元素】位置,那麼可以參考如下方法:
int lastIndexOf( Object obj, int start_index ); //如果沒有找到對象obj,那麼該方法返回-1
讓我們接上一段示例代碼,寫下下面的代碼,該程序將尋找序列容器中所有未“Welcome”的元素並將它們的位置輸出:
...
int i=0;
while( (i = MyVector.indexOf( "Welcome", i)) != -1 )
System.out.println( i );