黑马程序员技术交流社区

标题: 增强for循环问题 [打印本页]

作者: AliWanGX    时间: 2016-9-7 19:01
标题: 增强for循环问题
用增强for循环遍历list集合的时候。没办法使用remove去删除集合中的元素。
会出现并发异常。为什么会这样。原理是什么


作者: xh_javaee    时间: 2016-9-7 19:50
使用迭代器(iterator)删除
作者: 情天    时间: 2016-9-7 20:29
增强for的底层是用普通迭代器(Iterator)实现的,所以修改集合时会出现并发修改异常,可以边遍历边修改的迭代器是ListIterator!
作者: 32282722    时间: 2016-9-7 21:35
增强for循环底层是迭代器,iterator,所以不能在循环中删除元素,你可以看一下迭代器的部分
作者: 小菜白白白    时间: 2016-9-7 21:46
删除掉元素后,该元素后的元素得前移,整个下标就变了
作者: HARRY_yFd0S    时间: 2016-9-7 21:58
因为增强for底层是用迭代器遍历的。如果你用remove删除的话,迭代器会检测到,并主动抛出异常。你可以去看看迭代器的原码。
作者: SunCowbee    时间: 2016-9-7 22:21
会出现并发修改异常,得用List集合特有的Listiterator迭代器
作者: changfa    时间: 2016-9-7 22:25
增强for循环底层是迭代器,iterator,所以不能在循环中删除元素 可以使用 ListIterator
作者: 不灬语    时间: 2016-9-7 22:43
增强for循环
作者: shutdown    时间: 2016-9-7 23:09
remove()只是将待删除元素之后的元素移动到vector的前端,而不是删除。若要真正移除,需要搭配使用erase()。
作者: 哦啊啊    时间: 2016-9-7 23:18
好吧 楼上已经说得很清楚了
作者: 爱吃柠檬    时间: 2016-9-7 23:33
增强for循环依赖的是Iteretor迭代器,而我们在使用迭代器遍历集合的时候同时使用集合的remove方法,就会发生conCurrentModificationException就是并发修改异常,相当于你在搬东西的时候,有给你中途加量,你肯定不愿意,所以同理JVM会报这个异常,你可以通过迭代器的remove方法,别用集合的remove方法.
作者: a953558401    时间: 2016-9-7 23:34
只能说增强for循环是不可以delete东西的
作者: Toxicant    时间: 2016-9-8 01:17
增强for是基于Iterator的,如果使用增强for就表示引用了迭代器,在数据的读取过程中使用集合的remove方法就会造成并发修改异常,就是所谓的,你集合改变了,但是我迭代器中的东西没有改变,你删除某一组数据的时候,我的next的index正好就在这个位置,这样搞的迭代器失去了next的index,不能再继续next.所以就会出错,你可以使用迭代器自己的remove方法
作者: 流空有痕    时间: 2016-9-8 02:07
增强for的底层是用普通迭代器(Iterator)实现的,所以修改集合时会出现并发修改异常,可以边遍历边修改的迭代器是ListIterator!
作者: maxjack    时间: 2016-9-8 10:02
底层是用普通迭代器(Iterator)实现
作者: 370452158    时间: 2016-9-8 11:27
增强FOR循环不能直接删除元素,要用普通FOR循环或者迭代器迭代才可以
作者: itcoder    时间: 2016-9-8 12:48
顶顶顶顶顶顶顶顶顶顶顶




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2