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);
}
}错误二:混淆数组长度和列表长度
数组使用 .length,ArrayList 使用 .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 中常见的包装类型包括 Integer、Double 和 Boolean。
错误四:增强 for 循环中修改列表
增强 for 循环适合读取元素,不适合一边遍历一边删除:
java
for (String word : words) {
if (word.length() == 0) {
words.remove(word); // 不建议
}
}如果题目要求修改列表,通常使用普通 for 循环更容易控制索引。
刷题建议
遇到 ArrayList 题时,先问自己三个问题:
- 这道题是否会修改列表长度?
- 如果删除元素,索引会不会变化?
- 题目需要返回新列表,还是修改原列表?
这三个问题能覆盖大部分 AP CSA 列表题的陷阱。