ArrayList和Vector的区别是什么?
请对比Java中ArrayList和Vector的异同点,包括线程安全性、扩容机制、性能、历史背景以及现在的实际使用情况。为什么现在更推荐使用ArrayList?
回答
我还是少年
| 区别 | ArrayList | Vector |
|---|---|---|
| 线程安全 | 不安全 | 安全(synchronized) |
| 扩容倍数 | 1.5倍 | 2倍(可指定增量) |
| 初始容量 | 10 | 10 |
| 引入版本 | Java 2 | Java 1.0(遗留类) |
| 迭代器 | fail-fast | fail-fast(Enumeration也是) |
| 性能 | 更高(无同步开销) | 较低(方法级同步) |
为什么更推荐ArrayList:
- 大多数场景不需要线程安全,ArrayList性能更好
- 需要线程安全时,可用Collections.synchronizedList()或CopyOnWriteArrayList
- Vector的同步粒度太粗(方法级),效率低
- Vector是遗留类(Legacy class),新代码不建议使用
总结:默认使用ArrayList;多线程并发需同步时用同步包装器或并发集合。