Vector簡介
Vector 是矢量隊(duì)列择葡,它是JDK1.0版本添加的類。繼承于AbstractList疗垛,實(shí)現(xiàn)了List, RandomAccess, Cloneable這些接口罪裹。
Vector 繼承了AbstractList,實(shí)現(xiàn)了List孝常;所以,它是一個(gè)隊(duì)列蚓哩,支持相關(guān)的添加构灸、刪除、修改岸梨、遍歷等功能喜颁。
Vector 實(shí)現(xiàn)了RandmoAccess接口,即提供了隨機(jī)訪問功能曹阔。RandmoAccess是java中用來被List實(shí)現(xiàn)半开,為List提供快速訪問功能的。在Vector中赃份,我們即可以通過元素的序號快速獲取元素對象寂拆;這就是快速隨機(jī)訪問奢米。
Vector 實(shí)現(xiàn)了Cloneable接口,即實(shí)現(xiàn)clone()函數(shù)纠永。它能被克隆鬓长。
和ArrayList不同,Vector中的操作是線程安全的尝江。
Vector的構(gòu)造函數(shù)
Vector共有4個(gè)構(gòu)造函數(shù)
// 默認(rèn)構(gòu)造函數(shù)
Vector()
// capacity是Vector的默認(rèn)容量大小涉波。當(dāng)由于增加數(shù)據(jù)導(dǎo)致容量增加時(shí),每次容量會(huì)增加一倍炭序。
Vector(int capacity)
// capacity是Vector的默認(rèn)容量大小怠蹂,capacityIncrement是每次Vector容量增加時(shí)的增量值。
Vector(int capacity, int capacityIncrement)
// 創(chuàng)建一個(gè)包含collection的Vector
Vector(Collection<? extends E> collection)
Vector的數(shù)據(jù)結(jié)構(gòu)和ArrayList差不多少态,它包含了3個(gè)成員變量:elementData?,?elementCount,?capacityIncrement易遣。
(01) elementData 是"Object[]類型的數(shù)組"彼妻,它保存了添加到Vector中的元素。elementData是個(gè)動(dòng)態(tài)數(shù)組豆茫,如果初始化Vector時(shí)侨歉,沒指定動(dòng)態(tài)數(shù)組的>大小,則使用默認(rèn)大小10揩魂。隨著Vector中元素的增加幽邓,Vector的容量也會(huì)動(dòng)態(tài)增長,capacityIncrement是與容量增長相關(guān)的增長系數(shù)火脉,具體的增長方式牵舵,請參考源碼分析中的ensureCapacity()函數(shù)。
(02) elementCount 是動(dòng)態(tài)數(shù)組的實(shí)際大小倦挂。
(03) capacityIncrement 是動(dòng)態(tài)數(shù)組的增長系數(shù)畸颅。如果在創(chuàng)建Vector時(shí),指定了capacityIncrement的大蟹皆没炒;則,每次當(dāng)Vector中動(dòng)態(tài)數(shù)組容量增加時(shí)>犯戏,增加的大小都是capacityIncrement送火。
Vector支持4種遍歷方式。建議使用下面的第二種去遍歷Vector先匪,因?yàn)樾蕟栴}种吸。
(01) 第一種,通過迭代器遍歷呀非。即通過Iterator去遍歷骨稿。
Integer value =null;intsize = vec.size();for(inti=0; i
? ? value = (Integer)vec.get(i);? ? ? ?
}
(02) 第二種,隨機(jī)訪問,通過索引值去遍歷坦冠。
由于Vector實(shí)現(xiàn)了RandomAccess接口形耗,它支持通過索引值去隨機(jī)訪問元素。
Integer value =null;intsize = vec.size();for(inti=0; i
? ? value = (Integer)vec.get(i);? ? ? ?
}
(03) 第三種辙浑,另一種for循環(huán)激涤。如下:
Integer value =null;for (Integer integ:vec) {
? ? value = integ;
}
(04) 第四種,Enumeration遍歷判呕。如下:
Integer value =null;
Enumeration enu = vec.elements();while (enu.hasMoreElements()) {
? ? value = (Integer)enu.nextElement();
}