当我们在对集合中的元素进行操作时,通过foreach对集合进行遍历并且使用remove()方法时,如以下代码:
public class test {
public static void main(String[] args) {
List<String> list=new ArrayList<>();
list.add("a");
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
for (String aa:list
) {
if ("a".equals(aa)){
list.remove("a");
}
}
for (String a:list
) {
System.out.println(a);
}
}
}
此时程序会报错:
这是因为迭代器内部维护了索引位置相关的数据,它要求在迭代过程中,容器不能发生结构性变化,所谓结构性变化就是 添加、插入 和 删除 元素,而修改元素内容不算结构性变化。要避免该异常,就需要使用迭代器的 remove 方法。
在检验时又发现当remove倒数第二个元素时又不会报错,这是为什么呢?
因为foreach的