概要
類繼承關(guān)系
java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<E>
java.util.Vector<E>定義
public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{
}
實現(xiàn)
Vector是從JDK1.2就已提供的List實現(xiàn),與ArrayList一樣,也是基于Object數(shù)組的方式來實現(xiàn)的。
- 創(chuàng)建
默認創(chuàng)建大小為10的Object數(shù)組豌研,并將capacityIncrement設(shè)置為0邮辽。
public Vector() { this(10);}
public Vector(int initialCapacity) { this(initialCapacity, 0);}
public Vector(int initialCapacity, int capacityIncrement) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);
this.elementData = new Object[initialCapacity];
this.capacityIncrement = capacityIncrement;
}
- 添加元素 add(E)
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
add方法加了synchronized關(guān)鍵字稽屏,因此昏滴,此方法是線程安全的。
private void ensureCapacityHelper(int minCapacity) {
// overflow-conscious code
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
elementData = Arrays.copyOf(elementData, newCapacity);}
Vector擴大數(shù)組的方式與ArrayList不同是趴,若capacityIncrement > 0, 則數(shù)組大小擴大為現(xiàn)有size加上capacityIncrement,若capacityIncrement < 0, 則擴大為現(xiàn)有size的兩倍澄惊。這種容量控制策略比ArrayList更為可控唆途。
- 刪除 remove(Object)
除其調(diào)用的removeElement方法上有synchronized關(guān)鍵字外,和ArrayList完全相同掸驱。
- 獲取 get(int)
除該方法上有synchronized關(guān)鍵字外肛搬,和ArrayList完全相同。
注:
- Vector 是基于 Synchronized 實現(xiàn)的線程安全的 ArrayList, 但在插入元素時容量擴充與ArrayList不同毕贼,可通過傳入capacityIncrement來控制容量的擴充温赔。