Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

ArrayList 和 Vector 有哪些异同?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

两者都以可增长数组实现 List,支持按位置访问、重复值和 null。ArrayList 不提供内置同步,Vector 的常用方法带同步保护。新代码通常先选 ArrayList;多线程需求应按访问模式选择同步包装器或并发集合,而不是只凭 Vector 的同步标签决定。

讲清原理

数组实现意味着 get(i) 可直接定位,中间插删要移动后续引用。容量不等于 size,增长策略也不属于 List 契约。Vector 支持容量增量配置,ArrayList 的增长细节则应注明具体实现版本,不能当作所有 JVM 的固定规律。

Vector 单次方法同步,不会把 size 后接 get、迭代时检查后接读取等多步动作合成一个原子操作。其 Enumeration 与 Iterator 对修改的处理也不同,仍要遵守各自约定。

例子与易错点

if (!vector.isEmpty()) vector.remove(0); 在两个调用之间,另一个线程可能先清空列表,导致后续删除失败。需要整体约束时应统一加锁,或使用符合业务要求的队列操作。

线程独占场景使用 ArrayList 没有线程安全问题;共享只读数据则还需安全发布及元素自身约束。同步容器不会自动让元素中的可变字段也变得线程安全。

相关题:第 23 题、第 38 题、第 39 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。