Vector基础
public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable {}
(01)矢量队列,它是JDK1.0版本添加的类。继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口。
(02) 继承了AbstractList,实现了List;所以,它是一个队列,支持相关的添加、删除、修改、遍历等功能。
(03) 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在Vector中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。
(04)Vector 实现了Cloneable接口,即实现clone()函数。它能被克隆。
备注:和ArrayList不同,Vetor使用synchronized修饰部分方法,使得 Vector中的操作是线程安全的。
Vector数据结构
Vector的数据结构和ArrayList差不多,它包含了3个成员变量:elementData , elementCount, capacityIncrement。
(01) elementData 是"Object[]类型的数组",它保存了添加到Vector中的元素。elementData是个动态数组,如果初始化Vector时,没指定动态数组的>大小,则使用默认大小10。随着Vector中元素的增加,Vector的容量也会动态增长,capacityIncrement是与容量增长相关的增长系数,若容量增加系数 >0,则将容量的值增加“容量增加系数”;否则,将容量大小增加一倍。
(02)elementCount 是动态数组的实际大小。
(03) capacityIncrement 是动态数组的增长系数。如果在创建Vector时,指定了capacityIncrement的大小;则,每次当Vector中动态数组容量增加时>,增加的大小都是capacityIncrement。
Vector遍历方式
(01) 第一种,通过迭代器遍历。
Iterator iter = list.iterator();
while (iter.hasNext()) {
iter.next();
}
(02) 第二种,随机访问,通过索引值去遍历。
Integer value = null;
int size = vec.size();
for (int i=0; i<size; i++) {
value = (Integer)vec.get(i);
}
(03) 第三种,另一种for循环。
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();
}
效率:多次遍历Vector测试,使用索引的随机访问方式最快,使用迭代器最慢。
RandomAccess:24 ms
Iterator:25 ms
For:23 ms
Enumeration:24 ms