public class Vector<E> extends AbstractList<E>
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
public abstract class AbstractCollection<E> implements Collection<E>
public interface Collection<E> extends Iterable<E>
// 扩容机制2倍
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);
}
线程安全 方法中带有synchronized。
缺点
- Vector所有方法都是同步,有性能损失。Vector会在你不需要进行线程安全的时候,强制给你加锁,导致了额外开销,所以慢慢被弃用了
- Vector初始length是10 超过length时 以100%比率增长,相比于ArrayList更多消耗内存。
总结
我们更多的是通过锁定一系列的操作来实现线程安全的,也就是说将许多需要同步的资源放到一起。