public static void main(String[] args) {
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
ListIterator it = list.listIterator();
while(it.hasNext()){
it.next();
list.add("111");//为什么这里调用add方法会报错。
}
System.out.println(list);
}
}
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at javaEnhance.Test.main(Test.java:33)
这是什么异常作者: 余明辉 时间: 2012-8-7 19:23
iterator是在一个独立线程工作的,是有一把锁的。当iterator被创建的时候,他有一个指针指向原来的对象,并且他自己的一个索引表,当你用不是迭代器的方法对容器操作时,迭代器有可能找到的对象和容器中的对象是不同的,所以就会引发这个错误。
对集合操作的时候,最好别混用作者: 张_涛 时间: 2012-8-7 19:26
嘿嘿,帮你顶一下,记者回来看帖哦!作者: 张雪磊 时间: 2012-8-7 19:30 本帖最后由 张雪磊 于 2012-8-7 19:36 编辑
本帖最后由 杨文宇 于 2012-8-7 18:25 编辑
class Test {
public static void main(String[] args) {
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
ListIterator it = list.listIterator();
while(it.hasNext()){
it.next();
list.add("111");//为什么这里调用add方法会报错。//list.add("111")改成 li.add("111");
}
System.out.println(list);
}
}
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at javaEnhance.Test.main(Test.java:33)