前言
Vector
是 Java
早期提供的线程安全的动态数组实现,位于 java.util
包中。尽管在现代 Java
开发中,Vector
因性能问题逐渐被 ArrayList
取代,但了解其实现原理仍然有助于理解 Java
集合框架的演变和线程安全机制。
由于 Vector
的底层实现以及结构与 ArrayList
基本相同,所以着重分析 Vector
的特性。
线程安全性
Vector
是一个基于数组的可动态扩展的列表,类似于 ArrayList
,但它的所有关于线程安全的方法都被 synchronized
关键字修饰,因此是线程安全的。它支持随机访问元素,并且可以自动扩容以适应更多元素。
扩容机制
1 | private void ensureCapacityHelper(int minCapacity) { |
扩容策略:
- 如果
capacityIncrement > 0
,则新容量 = 旧容量 +capacityIncrement
。 - 如果
capacityIncrement <= 0
(默认情况),则新容量 = 旧容量 * 2(翻倍)
ArrayList
的扩容策略为扩大为原来的 1.5 倍。
后记
由于 synchronized
锁粒度过大,每次操作需要加锁,影响并发性能,Vector
也渐渐被弃用。