这两天写作业遇到了一些错误,尽管这个错误老师上课讲了但刚犯的时候还是不知道如何解决。
public class Test02 {
public static void main(String[] args) {
ArrayList<String > arrayList = new ArrayList<>();
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
arrayList.add("d");
System.out.println(arrayList);
Iterator<String> iterator = arrayList.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
if (next.equals("a")){
//arrayList.remove(next);
iterator.remove();
}
}
System.out.println(arrayList);
}
}
这个异常是并发修改异常:ConcurrentModificationException
因为在使用迭代器的时候,迭代器内部会维护一个 modCount 变量,用来记录集合被修改的次数。每当使用集合的 add 或 remove 方法修改集合时,modCount 会增加。而迭代器会在每次调用 next 或 hasNext 方法时检查 modCount 是否发生变化,如果发现不一致,就会抛出 这个异常,以避免在迭代过程中出现不一致的情况。
正确的处理方法应该是在迭代器内使用迭代器的remove()方法进行元素的移除。