Vector 是 Java 中的一个线程安全的动态数组实现,也是实现于 List 接口,底层数据结构与 ArrayList 相似,也是一个动态数组存放数据。在 add() 方法的时候使用 synchronized 进行同步写数据,但是开销较大,所以 Vector 是一个同步容器并不是一个并发容器,但在设计上考虑了线程安全性。下面是 Vector 的基本底层分析:
数据结构:
Vector 内部同样使用数组来存储元素。
初始时,Vector 的默认容量,当元素数量超过当前容量时,会自动进行扩容操作。与 ArrayList 不同的是,Vector 的扩容策略会略有不同。
数组操作:
ArrayList 类似,但在实现时考虑了线程安全性。Vector 在添加、删除、扩容等操作时会使用 synchronized 关键字来保证线程安全。add() 方法:
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
指定位置插入数据:
public void add(int index, E element) {
insertElementAt(element, index);
}
public synchronized void insertElementAt(E obj, int index) {
modCount++;
if (index > elementCount) {
throw new ArrayIndexOutOfBoundsException(index
+ " > " + elementCount);
}
ensureCapacityHelper(elementCount + 1);
System.arraycopy(elementData, index, elementData, index + 1, elementCount - index);
elementData[index] = obj;
elementCount++;
}
性能分析:
Vector 的方法都是同步的,因此在多线程环境下,可能会导致性能下降。因此,它在单线程环境下的性能可能比 ArrayList 差。ArrayList 相比,Vector 在添加、删除元素时的性能开销更大,因为它需要在操作时获取锁来保证线程安全性。