A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

AliWanGX

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© AliWanGX 初级黑马   /  2016-9-7 19:01  /  1094 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

用增强for循环遍历list集合的时候。没办法使用remove去删除集合中的元素。
会出现并发异常。为什么会这样。原理是什么

17 个回复

正序浏览
顶顶顶顶顶顶顶顶顶顶顶
回复 使用道具 举报
增强FOR循环不能直接删除元素,要用普通FOR循环或者迭代器迭代才可以
回复 使用道具 举报
底层是用普通迭代器(Iterator)实现
回复 使用道具 举报
增强for的底层是用普通迭代器(Iterator)实现的,所以修改集合时会出现并发修改异常,可以边遍历边修改的迭代器是ListIterator!
回复 使用道具 举报
增强for是基于Iterator的,如果使用增强for就表示引用了迭代器,在数据的读取过程中使用集合的remove方法就会造成并发修改异常,就是所谓的,你集合改变了,但是我迭代器中的东西没有改变,你删除某一组数据的时候,我的next的index正好就在这个位置,这样搞的迭代器失去了next的index,不能再继续next.所以就会出错,你可以使用迭代器自己的remove方法
回复 使用道具 举报
只能说增强for循环是不可以delete东西的
回复 使用道具 举报
增强for循环依赖的是Iteretor迭代器,而我们在使用迭代器遍历集合的时候同时使用集合的remove方法,就会发生conCurrentModificationException就是并发修改异常,相当于你在搬东西的时候,有给你中途加量,你肯定不愿意,所以同理JVM会报这个异常,你可以通过迭代器的remove方法,别用集合的remove方法.
回复 使用道具 举报
好吧 楼上已经说得很清楚了
回复 使用道具 举报
remove()只是将待删除元素之后的元素移动到vector的前端,而不是删除。若要真正移除,需要搭配使用erase()。
回复 使用道具 举报
增强for循环
回复 使用道具 举报
增强for循环底层是迭代器,iterator,所以不能在循环中删除元素 可以使用 ListIterator
回复 使用道具 举报
会出现并发修改异常,得用List集合特有的Listiterator迭代器
回复 使用道具 举报
因为增强for底层是用迭代器遍历的。如果你用remove删除的话,迭代器会检测到,并主动抛出异常。你可以去看看迭代器的原码。
回复 使用道具 举报
删除掉元素后,该元素后的元素得前移,整个下标就变了
回复 使用道具 举报
增强for循环底层是迭代器,iterator,所以不能在循环中删除元素,你可以看一下迭代器的部分
回复 使用道具 举报
增强for的底层是用普通迭代器(Iterator)实现的,所以修改集合时会出现并发修改异常,可以边遍历边修改的迭代器是ListIterator!
回复 使用道具 举报 1 0
使用迭代器(iterator)删除
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马