本帖最后由 苗润 于 2014-6-4 20:47 编辑
在使用迭代器遍历Arraylist的过程中,决不允许对集合的整体进行任何的添加删除操作(除了没有删除成功的,例如删除一个本来就没有在集合中的元素)
- ArrayList<Integer> list = new ArrayList();
- Collections.addAll(list,1,2,3,4,5);
- Iterator<Integer> it = list.iterator();
- while(it.hasNext)
- {
- Integer num = is.next();
- list.remove(new Integer(999));//这个是不会报错的,因为本来就不存在,因此删除没成功
- }
复制代码
在迭代器当中 它(即迭代器)会对集合中当前的元素或者当前的操作进行一个统计,如果它发现在它遍历集合的过程中,它的每一次next方法都会去检查剩余的元素是否和我应该剩余的元素是一样的,无论在你遍历的过程当中一次next到下一次next之间,只要你去添元素或者删元素,而没有通过迭代器去改变,当它再次执行到next方法时就会报并发修改异常,注意 并不是你删除或者添加的时候报错,而是你在修改以后,运行到下一次的next方法是报错,如果删除的是最后一个元素时,hasNext方法就会返回false 跳出循环,并不会运行到next方法 因此就不会报错了 |