阿里规范学习总结-不要再foreach对元素进行add()/remove()操作,

时间:2024-01-10 15:03:56

在foreach循环中,对元素进行 remove()/add() 操作需要使用Iterator ,如果运行在多线程环境下,需要对Iterator对象枷锁。

public class ForeachTest {
public static void main(String[] args){
List<String> a = new ArrayList<String>();
a.add("1");
a.add("2");
for (String temp : a) {
if("2".equals(temp)){
a.remove(temp);
}
}
System.out.println(a);
}
}

此方法执行报错信息如下:

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at sysman_service_intf.ForeachTest.main(ForeachTest.java:28)

从错误信息能够看出异常出现在checkForComodification()方法中。

下面我们分析异常出现的原因: