我的测试学习站TEST LEARNING HUB
开始学习
首页/精华文章/3. ArrayList 和 LinkedList 区别怎么回答

3. ArrayList 和 LinkedList 区别怎么回答

ArrayList 和 LinkedList 是 Java 集合面试中的经典题。很多同学会背“ArrayList 底层是数组,LinkedList 底层是链表;ArrayList 查询快,LinkedList 增删快”。这个结论方向没错,但面试时如果只背这一句,容易显得机械。测试开发岗位更应该结合测试数据存储、接口返回列表、用例管理和实际选择场景来回答。

在测试自动化中,ArrayList 的使用频率远高于 LinkedList。因为我们多数场景是保存一组测试用例、接口返回列表、断言结果、失败用例,然后遍历或按下标访问。LinkedList 只有在频繁在头尾插入删除时才有一定优势,但实际测试框架中不常用。

一、ArrayList 怎么理解

ArrayList 底层基于动态数组。

特点:

  • 查询快;
  • 按下标访问方便;
  • 末尾追加常用;
  • 中间插入删除需要移动元素;
  • 适合读多写少场景。

示例:

List<String> cases = new ArrayList<>();
cases.add("登录成功");
cases.add("密码错误");
String first = cases.get(0);

测试中常用于保存测试用例列表、接口返回数据、批量参数。

二、LinkedList 怎么理解

LinkedList 底层基于双向链表。

特点:

  • 插入删除节点不需要整体移动数组;
  • 按下标查询慢,需要遍历;
  • 可以当队列或双端队列使用;
  • 内存开销相对更大,因为节点要保存前后指针。

示例:

LinkedList<String> queue = new LinkedList<>();
queue.addLast("task1");
queue.addLast("task2");
String task = queue.removeFirst();

如果需要队列行为,可以考虑 LinkedList,但更专业的场景也可能使用 Queue、Deque。

三、核心区别

对比点ArrayListLinkedList
底层结构动态数组双向链表
查询快,按下标访问慢,需要遍历
末尾添加通常较快较快
中间插入删除需要移动元素找到节点后操作较快
内存相对小节点指针开销更大
测试场景用例列表、响应列表队列、频繁头尾操作

四、测试开发中怎么选择

大多数测试框架中优先用 ArrayList。

原因:

  • 测试用例通常是批量读取后遍历;
  • 接口返回列表通常需要按顺序断言;
  • 用例数据很少频繁在中间插入删除;
  • ArrayList 使用更简单、性能足够。

LinkedList 适合:

  • 模拟任务队列;
  • 需要频繁从头部取元素;
  • 需要双端队列操作;
  • 不依赖随机访问。

五、接口测试场景

接口返回订单列表时,通常用 List 接收:

List<Order> orders = new ArrayList<>();

测试会关注:

  • 列表数量;
  • 排序;
  • 字段完整;
  • 是否重复;
  • 分页是否正确。

这些操作更适合 ArrayList。

六、常见误区

1. 认为 LinkedList 一定增删快

如果你要先按下标找到中间位置,LinkedList 也需要遍历,未必快。

2. 认为 ArrayList 插入一定慢

末尾追加很常见,性能通常很好。

3. 测试框架中过度追求底层结构

实际测试代码更关注可读性和维护性。多数情况 ArrayList 足够。

七、面试回答模板

如果面试官问“ArrayList 和 LinkedList 区别”,可以这样回答:

ArrayList 底层是动态数组,支持按下标快速访问,适合查询多、遍历多的场景;LinkedList 底层是双向链表,适合频繁头尾插入删除或队列场景,但按下标访问需要遍历。测试开发中,我更多使用 ArrayList 保存测试用例、接口返回列表和断言结果,因为这些场景主要是读取、遍历和按顺序校验;如果要模拟任务队列或频繁从头部取数据,可以考虑 LinkedList 或 Deque。

八、常见追问

追问:ArrayList 扩容怎么理解?

ArrayList 底层数组容量不够时会扩容并复制元素,所以大量添加时可考虑初始容量。

追问:LinkedList 查询为什么慢?

因为它不是连续数组,按下标访问需要从头或尾遍历节点。

追问:测试自动化里常用哪个?

通常 ArrayList 更常用,用于保存用例和接口返回列表。

九、练习清单

  1. 用 ArrayList 保存测试用例;
  2. 遍历 ArrayList;
  3. 按下标取元素;
  4. 用 LinkedList 模拟队列;
  5. 理解数组和链表区别;
  6. 说清查询和增删差异;
  7. 结合接口返回列表回答;
  8. 避免绝对化说法;
  9. 理解 Deque;
  10. 准备面试回答。

ArrayList 和 LinkedList 的区别,不要只背底层结构。测试岗位要结合用例列表、接口响应列表和任务队列场景说明为什么选择某一种。

配套刷题: