1,错误代码
List<String> list = new ArrayList<>(); list.add("dai"); list.add(new String("daa")); list.add("aaa");
for (String s : list){ if(s=="dai"||s=="daa"){ list.remove(s); } }
报错:
原因是:
进入报错信息,AbstractList类,modCount != expectedModCount 抛异常。
modCount :表示对list的修改次数,当调用List的add或者remove方法的时候,这个modCount加一或减一
expectedModCount:Iterator:期望这个list被修改的次数,初始值为modCount。
由于ArrayList是线程不安全的,所以加以上两个参数控制是否同时操作。
arraylist的remove没有将expectedModCount=modCount;导致ArrayListd.next()方法中调用checkForComodification()方法上面两个参数不相等,抛出异常。
解决:
将
for (String s : list){ if(s=="di"||s=="da"){ list.remove(s); } }
替换为
Iterator<String> stringIterator = list.iterator(); while (stringIterator.hasNext()){ String s = stringIterator.next(); if(s=="dai"||s=="daa"){ stringIterator.remove(); } }
Iterator重写了remove(),