问题描述
代码很简单 ,其实就是想测试一下iterator 的用法,而且我在用iterator遍历的时候也没有修改原来集合中的内容。import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class TestList {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubList<String> l = new ArrayList<String>();Iterator it = l.iterator();String s = "abc";for(int i=0;i<10;i++){s+=i;l.add( s);}System.out.println(l);while(it.hasNext()){System.out.println("aa");it.next();}}}运行结果:Exception in thread "main" java.util.ConcurrentModificationExceptionat java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)at java.util.AbstractList$Itr.next(AbstractList.java:343)at TestList.main(TestList.java:34)[abc0, abc01, abc012, abc0123, abc01234, abc012345, abc0123456, abc01234567, abc012345678, abc0123456789]aa
解决方案
补充之前的回答:原因说明:javadoc中写到:如果进行迭代时用调用此方法之外的其他方式修改了该迭代器所指向的集合,则迭代器的行为是不明确的。 你的代码中 用for循环修改了迭代器所指向的集合所以迭代器的行为是不明确的。
解决方案二:
引用Iterator it = l.iterator(); 移到while语句上方就没问题了
解决方案三:
把 Iterator<String> it = l.iterator();这句 放到后面那个while的前面 for循环的后面