《阿里巴巴JAVA开发手册》中有这样一条:
不要在 foreach 循环里进行元素的 add / remove 操作,remove 元素使用 Iterator 方式。
经测试,当在 foreach 循环中 add / remove 集合元素,可能会抛出 ConcurrentModificationException 异常,下面介绍进行详细说明。
1. foreach循环
foreach 又称为增强型for循环,通过打印以下代码的class字节码,我们来了解下其内部实现。
List list = new ArrayList<> ();
list.add(“a”);
list.add(“b”);
for (String item : list) {
System.out.println(item);
}
使用javap -c 命令查看class文件的字节码:
image
由上图红框圈起的部分不难发现,foreach 循环内部实际是通过 Iterator 实现的,以上代码等同于:
List list = new ArrayList<> ();
list.add(“a”);
list.add(“b”);
for (Iterator i = list.