错误示例
使用foreach:失败
ArrayList<String> list = new ArrayList<>();
list.add("111");
list.add("222");
list.add("333");
log.info(list.toString());
for (String i : list) {
list.remove("222");
}
log.info(list.toString());
结果:
11:50:48.333 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
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.xiaolinge.com.hello.HelloWord.main(HelloWord.java:30)
显然木有成功!
解决方式一
如果使用Iterator()迭代元素, 在迭代过程中不可以删除元素, 否则会出现并发修改异常.
迭代元素可增减, 使用listIterator()方法.
Iterator it=list.listIterator();
Iterator it=list.iterator();
while(it.hasNext()){
String s = (String) it.next();
if ("world".equals(s)) {
it.remove();
}
}
解决方式二(不推荐, 后面的数据无法删除)
使用for循环:
ArrayList<String> list = new ArrayList<>();
list.add("111");
list.add("222");
list.add("333");
log.info(list.toString());
for (int i = 0; i <list.size(); i++) {
list.remove("222");
}
log.info(list.toString());
结果:
11:11:52.532 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
11:11:52.539 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 333]
显然成功!