Vector與ArrayList集合一樣,內部使用數組實現,不過它是線程同步的,同步的代碼:
public Enumeration<E> elements() { return new Enumeration<E>() { int count = 0; public boolean hasMoreElements() { return count < elementCount; } public E nextElement() { synchronized (Vector.this) { if (count < elementCount) { return elementData(count++); } } throw new NoSuchElementException("Vector Enumeration"); } }; }
同一時刻只能有一個線程能夠編輯Vector,避免了多線程同時寫不會出現我在ArrayList集合中所說的數組越界現象,但是同步需要花費較多的時間,所以增刪的速度就慢,通過源碼可以發現Vector在容量不夠的時候,它默認擴展一倍的容量,擴容源碼如下:
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); }