1.1.1.1.4 向量類Vector
Java.util.Vector提供了向量(Vector)類以實現(xiàn)類似動態(tài)數(shù)組的功能。在Java語言中。正如在一開始就提到過,是沒有指針概念的,但如果能正確靈活地使用指針又確實可以大大提高程序的質(zhì)量,比如在C、C++中所謂“動態(tài)數(shù)組”一般都由指針來實現(xiàn)。為了彌補(bǔ)這點缺陷,Java提供了豐富的類庫來方便編程者使用,Vector類便是其中之一。事實上,靈活使用數(shù)組也可完成向量類的功能,但向量類中提供的大量方法大大方便了用戶的使用。
創(chuàng)建了一個向量類的對象后,可以往其中隨意地插入不同的類的對象,既不需顧及類型也不需預(yù)先選定向量的容量,并可方便地進(jìn)行查找。對于預(yù)先不知或不愿預(yù)先定義數(shù)組大小,并需頻繁進(jìn)行查找、插入和刪除工作的情況,可以考慮使用向量類。
向量類提供了三種構(gòu)造方法:
public vector()
public vector(int initialcapacity,int capacityIncrement)
public vector(int initialcapacity)
使用第一種方法,系統(tǒng)會自動對向量對象進(jìn)行管理。若使用后兩種方法,則系統(tǒng)將根據(jù)參數(shù)initialcapacity設(shè)定向量對象的容量(即向量對象可存儲數(shù)據(jù)的大小),當(dāng)真正存放的數(shù)據(jù)個數(shù)超過容量時,系統(tǒng)會擴(kuò)充向量對象的存儲容量。參數(shù)capacityIncrement給定了每次擴(kuò)充的擴(kuò)充值。當(dāng)capacityIncrement為0時,則每次擴(kuò)充一倍。利用這個功能可以優(yōu)化存儲。
在Vector類中提供了各種方法方便用戶使用:
■插入功能
(1)public final synchronized void addElement(Object obj)
將obj插入向量的尾部。obj可以是任何類的對象。對同一個向量對象,可在其中插入不同類的對象。但插入的應(yīng)是對象而不是數(shù)值,所以插入數(shù)值時要注意將數(shù)值轉(zhuǎn)換成相應(yīng)的對象。
例 要插入一個整數(shù)1時,不要直接調(diào)用v1.addElement(1),正確的方法為:
Vector v1=new Vector();
Integer integer1=new Integer(1);
v1.addElement(integer1);
(2)public final synchronized void setElementAt(object obj,int index)
將index處的對象設(shè)成obj,原來的對象將被覆蓋。
(3)public final synchronized void insertElementAt(Object obj,int index)
在index指定的位置插入obj,原來對象以及此后的對象依次往后順延。
■刪除功能
(1)public final synchronized void removeElement(Object obj)
從向量中刪除obj。若有多個存在,則從向量頭開始試,刪除找到的第一個與obj相同的向量成員。
(2)public final synchronized void removeAllElement()
刪除向量中所有的對象。
(3)public final synchronized void removeElementlAt(int index)
刪除index所指的地方的對象。
■查詢搜索功能
(1)public final int indexOf(Object obj)
從向量頭開始搜索obj ,返回所遇到的第一個obj對應(yīng)的下標(biāo),若不存在此obj,返回-1。
(2)public final synchronized int indexOf(Object obj,int index)
從index所表示的下標(biāo)處開始搜索obj。
(3)public final int lastIndexOf(Object obj)
從向量尾部開始逆向搜索obj。
(4)public final synchronized int lastIndexOf(Object obj,int index)
從index所表示的下標(biāo)處由尾至頭逆向搜索obj。
(5)public final synchronized Object firstElement()
獲取向量對象中的首個obj。
(6)public final synchronized Object lastelement()
獲取向量對象中的最后一個obj。
了解了向量的最基本的方法后,我們來看一下例8.3VectorApp.java。
例1.3 VectorApp.java。
import java.util.Vector;
import java.lang.*;//這一句不應(yīng)該要,但原文如此
import java.util.Enumeration;
public class VectorApp{
public static void main(String[] args){
Vector v1=new Vector();
Integer integer1=new Integer(1);
v1.addElement("one");
//加入的為字符串對象
v1.addElement(integer1);
v1.addElement(integer1);
//加入的為Integer的對象
v1.addElement("two");
v1.addElement(new Integer(2));
v1.addElement(integer1);
v1.addElement(integer1);
System.out.println("The vector v1 is:\n\t"+v1);
//將v1轉(zhuǎn)換成字符串并打印
v1.insertElementAt("three",2);
v1.insertElementAt(new Float(3.9),3);
System.out.println("The vector v1(used method insertElementAt()) is:\n\t "+v1);
//往指定位置插入新的對象,指定位置后的對象依次往后順延
v1.setElementAt("four",2);
System.out.println("The vector v1(used method setElementAt()) is:\n\t "+v1);
//將指定位置的對象設(shè)置為新的對象
v1.removeElement(integer1);
//從向量對象v1中刪除對象integer1由于存在多個integer1所以從頭開始
//找,刪除找到的第一個integer1
Enumeration enum=v1.elements();
System.out.print("The vector v1(used method removeElement())is:");
while(enum.hasMoreElements())
System.out.print(enum.nextElement()+" ");
System.out.println();
//使用枚舉類(Enumeration)的方法來獲取向量對象的每個元素
System.out.println("The position of object 1(top-to-bottom):"
+ v1.indexOf(integer1));
System.out.println("The position of object 1(tottom-to-top):"
+v1.lastIndexOf(integer1));
//按不同的方向查找對象integer1所處的位置
v1.setSize(4);
System.out.println("The new vector(resized the vector)is:"+v1);
//重新設(shè)置v1的大小,多余的元素被行棄
}
}
運行結(jié)果:
E:\java01>java VectorApp
The vector v1 is:
[one, 1, 1, two, 2, 1, 1]
The vector v1(used method insertElementAt()) is:
[one, 1, three, 3.9, 1, two, 2, 1, 1]
The vector v1(used method setElementAt()) is:
[one, 1, four, 3.9, 1, two, 2, 1, 1]
The vector v1(used method removeElement())is:one four 3.9 1 two 2 1 1
The position of object 1(top-to-bottom):3
The position of object 1(tottom-to-top):7
The new vector(resized the vector)is:[one, four, 3.9, 1]
E:\java01>
從例1.3運行的結(jié)果中可以清楚地了解上面各種方法的作用,另外還有幾點需解釋。
(1)類Vector定義了方法
public final int size()
此方法用于獲取向量元素的個數(shù)。它的返回值是向是中實際存在的元素個數(shù),而非向量容量?梢哉{(diào)用方法capactly()來獲取容量值。
方法:
public final synchronized void setsize(int newsize)
此方法用來定義向量大小。若向量對象現(xiàn)有成員個數(shù)已超過了newsize的值,則超過部分的多余元素會丟失。
(2)程序中定義了Enumeration類的一個對象
Enumeration是java.util中的一個接口類,在Enumeration中封裝了有關(guān)枚舉數(shù)據(jù)集合的方法。
在Enumeration中提供了方法hawMoreElement()來判斷集合中是束還有其它元素和方法nextElement()來獲取下一個元素。利用這兩個方法可以依次獲得集合中元素。
Vector中提供方法:
public final synchronized Enumeration elements()
此方法將向量對象對應(yīng)到一個枚舉類型。java.util包中的其它類中也大都有這類方法,以便于用戶獲取對應(yīng)的枚舉類型。
相關(guān)推薦:2010年9月計算機(jī)等級考試試題及答案解析專題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |