Vector、ArrayList、LinkedList 应怎样比较?
先说出你的答案
定义边界、关键机制、一个反例;P8题再补容量、失败与验证。
查看完整题解
参考回答
直接回答
Vector 与 ArrayList 是数组列表,随机位置读取是 O(1),中间插删通常要移动引用;LinkedList 是双向链表,按位置读取最坏 O(n),已定位后的链接修改便宜。Vector 的常用方法同步,另两者没有内置同步。比较应先固定操作位置、定位方式与并发条件。
讲清原理
| 场景 | ArrayList / Vector | LinkedList |
|---|---|---|
| 按下标读取 | 直接定位 | 沿链寻找 |
| 中间插入 | 移动后续引用 | 先定位,再改链接 |
| 已有迭代器当前位置插入 | 仍可能移动引用 | 可直接改链接 |
| 额外空间 | 可能有空容量 | 每项有节点与链接 |
尾部追加、头部插入、随机位置插入是不同负载。数组连续保存的是引用槽位,不代表引用指向的所有业务对象也连续存放;示意图不能当作 JVM 物理地址图。
例子与易错点
把列表装满后不断在开头插入,ArrayList 需要反复搬动后续引用;若主要从两端加入与取出,Deque 往往比“必须选某个 List”的思路更贴切。
Vector 的同步不会自动保证跨方法业务步骤原子化。没有并发要求时,不应只因其历史上被称为“安全”就默认选它;也不能用未测量的固定倍数比较速度。
相关题:第 10 题、第 20 题、第 25 题、第 38 题。
和评分标准对照,你能独立回答到哪一步?
自评会安排下一次复习,不保存你的口述内容。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。