黑马程序员技术交流社区
标题:
集合问题
[打印本页]
作者:
马姗姗
时间:
2014-1-13 21:18
标题:
集合问题
本帖最后由 马姗姗 于 2014-1-14 16:30 编辑
当使用Iterator遍历一个list集合时,通过Object o = iterator.next(),这时如果使用list.remove(o),就会抛出ConcurrentModificationException,但是使用iterator.remove(),就没有问题,一个问题困扰了好久,希望有朋友帮我解决下...
作者:
几番意难相付
时间:
2014-1-13 21:22
当集合被迭代时,如果在使用了迭代器的对集合的操作方法,就不能使用集合的操作方法,否则就会抛出异常。
解决办法,要么,在迭代集合的过程中,全部使用迭代器中的方法,要么 全部使用集合的方法。
作者:
大大老伴要跪IT
时间:
2014-1-13 21:29
是的,当我们用迭代器去迭代集合的时候,是不能再用集合对象去操作集合的。解决办法由两种:一个是用迭代器去操作集合,二是用普通for循环去操作集合。
作者:
ixiangfeng
时间:
2014-1-13 21:35
本帖最后由 ixiangfeng 于 2014-1-13 21:37 编辑
并发修改异常,集合的方法和迭代器的方法不能同时进行,否则会抛出此异常,假如你迭代之前是3个元素,在迭代时,当你迭代了第一个元素然后用集合的remove方法删除了后面一个,这时迭代器又不知道,它还继续迭代后面的两个元素,但这时元素被删除了一个......所以用Iterator迭代时只能用它里面的三个方法
如果你想要像上面那样做的话可以用Iterator的子接口ListIterator,它里面有很多方法可以做到
作者:
DOOR
时间:
2014-1-13 21:57
本帖最后由 DOOR 于 2014-1-13 21:59 编辑
导致的原因是:
集合引用和迭代器引用在同时操作元素,通过集合获取到对应的迭代器后,在迭代中,进行集合引用的元素移除,迭代器并不知道,所以会出现异常情况。
解决方法:
既然是在迭代中对元素进行操作,找迭代器的方法最为合适.可是Iterator中只有hasNext,next,remove方法.它的子接口ListIterator,该列表迭代器接口具备了对元素的增、删、改、查的动作。
ListIterator是List集合特有的迭代器。
ListIterator it = list.listIterator;//取代Iterator it = list.iterator;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2