AP新课来了

ArrayList 高频考法:遍历中增删的陷阱与 FRQ 套路

更新于 2026-08-15 · AP新课来了教研组

先说结论

  • ·ArrayList 必考且考法固定:FRQ 第 3 题几乎年年围绕它出题,套路是遍历 + 条件判断 + 增删改的组合。
  • ·全卷最著名的陷阱:正向遍历中 remove 元素后,后续元素前移、索引却继续 +1,导致跳过相邻元素——解法是 i-- 或倒序遍历。
  • ·必须形成肌肉记忆的方法就六个:size、get、set、add(两种)、remove——考试提供 Quick Reference,但查表的速度不够用。

三大考试套路

把历年真题里的 ArrayList 题归类,几乎全部落在三个模式里:

  • 模式一 聚合遍历:求和、计数、找最大最小。基础形态,考察 get(i) 与循环边界 size() 的配合;
  • 模式二 条件删除:移除所有满足条件的元素。全卷失分王,核心是删除后的索引处理;
  • 模式三 构建新列表:遍历原列表,把符合条件的元素(或加工结果)add 进新列表并返回。近年 FRQ 的偏好考法,比原地修改更考验方法设计。

遍历中删除:把陷阱追踪一遍

设列表为 [3, 8, 8, 5],任务是删除所有 8。正向遍历:i=0 时 3 保留;i=1 时删除 8,此时列表变成 [3, 8, 5],第二个 8 前移到了下标 1;但 i 递增到 2 指向 5——第二个 8 被跳过了。这就是「相邻重复元素删不干净」的经典 bug。

两种修复:删除后 i--(让下一轮重新检查当前下标),或者从尾部倒序遍历(删除不影响未检查部分的下标)。考试两种都认,选一种练成本能。

ArrayList 与数组的互换考点

选择题喜欢考两者差异:数组用 length(属性、无括号)、ArrayList 用 size()(方法);数组用 [i] 取值、ArrayList 用 get(i);数组长度固定、ArrayList 可增删。混用这些语法是低级但高频的丢分点。

另一个细节:ArrayList 存的是对象,基本类型会自动装箱(int → Integer)。考试只需要知道「声明写 ArrayList<Integer>」即可,不深究装箱机制。

Free Assessment

孩子适不适合,15 分钟测一测

不考编程知识——测逻辑、数学、英语读题、流程推演、细节专注五项底层能力, 做完当场出分维度报告。

免费测评

相关课程

AP CSA · Java 编程

从第一行 Java 代码到 FRQ 编程大题的 36 周完整路径,覆盖全部 53 个 AP Topics,浏览器里直接写、跑、测。

常见问题

增强 for 循环(for-each)能用于删除吗?

不能,遍历中用 for-each 删除会抛 ConcurrentModificationException。这是选择题考点:凡是要删除,就用普通 for 循环。

add(index, element) 和 add(element) 都要掌握吗?

要。尾部追加 add(e) 是常态,指定位置插入 add(i, e) 在「保持有序插入」类题目里出现,插入后后续元素后移的效果也是选择题考点。

FRQ 第 3 题一般能拿几分?

训练充分的学生这题应以 8–9 分为目标(满分 9)。它的套路稳定度是四道 FRQ 里最高的,属于「投入必有回报」的题。