黑马程序员技术交流社区

标题: 关于并发修改异常 [打印本页]

作者: suifeng1987    时间: 2016-8-26 01:00
标题: 关于并发修改异常
  用增强for循环不是可以遍历数组嘛,但是底层是用迭代器做的,那为什么在遍历的过程中集合对象增删就会出现并发修改异常,而用一个对象数组里面的每一个对象调用删除自己的方法时就不会出,不都是两件事儿两个人做的么?
作者: 坚持努力wbj    时间: 2016-8-26 07:32
亲,代码呢?
作者: 阿卜    时间: 2016-8-26 12:23
用一个对象数组里面的每一个对象调用删除自己的方法时就不会出。这句话有点不明白

比较方便理解的说法就是……
集合用迭代器遍历的时候,是先用原本集合的iterator()方法生成迭代器。或者说迭代器对应的是原本的集合。
迭代过程中,原集合增删发生了改变,迭代器和集合的型号就对不上了,所以会出现并发修改异常。
作者: gsa798780633    时间: 2016-8-26 20:02
foreach遍历数组,好像是先将数组转换成集合后,用集合的迭代器调用的,
集合迭代的过程中是不可以用集合对象的remove或add方法修改集合大小的,因为iterator中保存的集合大小size不会随着改变,继续迭代会发生数据错乱,下标溢出;如果调用迭代器自身的remove方法就不会有这种问题,他会动态修改size.





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