概要
類繼承關系
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{
}
實現
Vector是從JDK1.2就已提供的List實現,與ArrayList一樣,也是基于Object數組的方式來實現的。
- 創(chuàng)建
默認創(chuàng)建大小為10的Object數組,并將capacityIncrement設置為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關鍵字,因此,此方法是線程安全的。
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擴大數組的方式與ArrayList不同,若capacityIncrement > 0, 則數組大小擴大為現有size加上capacityIncrement,若capacityIncrement < 0, 則擴大為現有size的兩倍。這種容量控制策略比ArrayList更為可控。
- 刪除 remove(Object)
除其調用的removeElement方法上有synchronized關鍵字外,和ArrayList完全相同。
- 獲取 get(int)
除該方法上有synchronized關鍵字外,和ArrayList完全相同。
注:
- Vector 是基于 Synchronized 實現的線程安全的 ArrayList, 但在插入元素時容量擴充與ArrayList不同,可通過傳入capacityIncrement來控制容量的擴充。