CodeWalk

ArrayList和Vector的区别是什么?

作者:我还是少年 · 2026-05-30 12:55

请对比Java中ArrayListVector的异同点,包括线程安全性、扩容机制、性能、历史背景以及现在的实际使用情况。为什么现在更推荐使用ArrayList?

回答

我还是少年

区别ArrayListVector
线程安全不安全安全(synchronized)
扩容倍数1.5倍2倍(可指定增量)
初始容量1010
引入版本Java 2Java 1.0(遗留类)
迭代器fail-fastfail-fast(Enumeration也是)
性能更高(无同步开销)较低(方法级同步)

为什么更推荐ArrayList

  1. 大多数场景不需要线程安全,ArrayList性能更好
  2. 需要线程安全时,可用Collections.synchronizedList()或CopyOnWriteArrayList
  3. Vector的同步粒度太粗(方法级),效率低
  4. Vector是遗留类(Legacy class),新代码不建议使用

总结:默认使用ArrayList;多线程并发需同步时用同步包装器或并发集合。