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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© suifeng1987 中级黑马   /  2016-8-26 01:00  /  561 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  用增强for循环不是可以遍历数组嘛,但是底层是用迭代器做的,那为什么在遍历的过程中集合对象增删就会出现并发修改异常,而用一个对象数组里面的每一个对象调用删除自己的方法时就不会出,不都是两件事儿两个人做的么?

3 个回复

倒序浏览
亲,代码呢?
回复 使用道具 举报
用一个对象数组里面的每一个对象调用删除自己的方法时就不会出。这句话有点不明白

比较方便理解的说法就是……
集合用迭代器遍历的时候,是先用原本集合的iterator()方法生成迭代器。或者说迭代器对应的是原本的集合。
迭代过程中,原集合增删发生了改变,迭代器和集合的型号就对不上了,所以会出现并发修改异常。
回复 使用道具 举报
foreach遍历数组,好像是先将数组转换成集合后,用集合的迭代器调用的,
集合迭代的过程中是不可以用集合对象的remove或add方法修改集合大小的,因为iterator中保存的集合大小size不会随着改变,继续迭代会发生数据错乱,下标溢出;如果调用迭代器自身的remove方法就不会有这种问题,他会动态修改size.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马