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 题。
和评分标准对照,你能独立回答到哪一步?
自评会安排下一次复习,不保存你的口述内容。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。