最近在项目中发现有人用到了在for循环中去进行列表的添加删除,最后报错,我就试着去研究底层代码。
发现问题
首先我们来看这段代码
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
//迭代器
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
String next = iterator.next();
if(next.contains("1")){
list.remove(next);
}
}
}
我们发现这次会报这个错误
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
at com.zsap.project.server.bootstrap.controller.PrjProjTeamController.main(PrjProjTeamController.java:87)
那我们如果用for循环呢
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add