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

Vector、ArrayList、LinkedList 应怎样比较?

先说出你的答案

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

查看完整题解

参考回答

直接回答

Vector 与 ArrayList 是数组列表,随机位置读取是 O(1),中间插删通常要移动引用;LinkedList 是双向链表,按位置读取最坏 O(n),已定位后的链接修改便宜。Vector 的常用方法同步,另两者没有内置同步。比较应先固定操作位置、定位方式与并发条件。

讲清原理

场景 ArrayList / Vector LinkedList
按下标读取 直接定位 沿链寻找
中间插入 移动后续引用 先定位,再改链接
已有迭代器当前位置插入 仍可能移动引用 可直接改链接
额外空间 可能有空容量 每项有节点与链接

尾部追加、头部插入、随机位置插入是不同负载。数组连续保存的是引用槽位,不代表引用指向的所有业务对象也连续存放;示意图不能当作 JVM 物理地址图。

数组按下标定位,链表沿节点移动;插入成本还包括定位
数组按下标定位,链表沿节点移动;插入成本还包括定位

例子与易错点

把列表装满后不断在开头插入,ArrayList 需要反复搬动后续引用;若主要从两端加入与取出,Deque 往往比“必须选某个 List”的思路更贴切。

Vector 的同步不会自动保证跨方法业务步骤原子化。没有并发要求时,不应只因其历史上被称为“安全”就默认选它;也不能用未测量的固定倍数比较速度。

相关题:第 10 题、第 20 题、第 25 题、第 38 题。

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

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