Skip to content

AP CSA Java ArrayList 常见错误

ArrayList 是 AP CSA 高频考点。很多学生语法会写,但在删除元素、索引变化和对象引用上容易失分。

错误一:删除元素后继续向前遍历

下面的代码看起来会删除所有偶数,但可能跳过元素:

java
for (int i = 0; i < nums.size(); i++) {
    if (nums.get(i) % 2 == 0) {
        nums.remove(i);
    }
}

原因是 remove(i) 后,后面的元素会向前移动。此时 i++ 会跳过刚移动到当前位置的元素。

更稳定的写法是从后往前删:

java
for (int i = nums.size() - 1; i >= 0; i--) {
    if (nums.get(i) % 2 == 0) {
        nums.remove(i);
    }
}

错误二:混淆数组长度和列表长度

数组使用 .lengthArrayList 使用 .size()

java
int[] arr = new int[5];
int n1 = arr.length;

ArrayList<Integer> list = new ArrayList<Integer>();
int n2 = list.size();

考试中如果把两者混用,通常会直接导致编译错误。

错误三:忘记包装类型

ArrayList 不能直接写基本类型:

java
ArrayList<int> nums; // 错误
ArrayList<Integer> nums; // 正确

AP CSA 中常见的包装类型包括 IntegerDoubleBoolean

错误四:增强 for 循环中修改列表

增强 for 循环适合读取元素,不适合一边遍历一边删除:

java
for (String word : words) {
    if (word.length() == 0) {
        words.remove(word); // 不建议
    }
}

如果题目要求修改列表,通常使用普通 for 循环更容易控制索引。

刷题建议

遇到 ArrayList 题时,先问自己三个问题:

  1. 这道题是否会修改列表长度?
  2. 如果删除元素,索引会不会变化?
  3. 题目需要返回新列表,还是修改原列表?

这三个问题能覆盖大部分 AP CSA 列表题的陷阱。

AP CSA 刷题文档库,服务于 AP Computer Science A 学习与练习。