原因
ArrayList集合中有一个域modCount,每次对集合进行增删时都会modCount++;
而for循环的背后实现原理其实就是Iterator,迭代ArrayList的Iterator中有一个变量expectedModCount,该变量会初始化和modCount相等,但如果接下来如果集合进行增删,modCount改变,就会造成expectedModCount!=modCount,此时就会抛出java.util.ConcurrentModificationException异常
解决办法
方法一:removeAll方法
List<String> list= new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
List<String> removeList= new ArrayList<>();
for (String s: list) {
if ("c".equals(s)) {
removeList.add(s);
}
}
list.removeAll(removeList);
方法二:iterator.remove()
List<String> list= new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
if ("c".equals(s)) {
iterator.remove();
}
}
拓展: