迭代器过程分析
话不多说,上图


【注意】上图是通过list集合直接删除的元素,并没有通过迭代器。


【modCount和expectedModCount解释】
http://liuzhaomin.iteye.com/blog/1038289

所以通过迭代器删除对象并不会报错
- modCount:已从结构上修改此列表的次数。
- 比如add()、remove()方法都会使得modCount+1;
- 详见API之AbstractList
- expectedModCount:创建迭代器时的modCount
- 1、迭代过程中删除元素,只可以通过迭代器删除。
- (会保证modCount和expectedModCount数值一致,
- 不会抛ConcurrentModificationException异常)
- 2、迭代过程中,会对原数据的“引用”做备份,
- 通过“引用”能够直接修改数据源。(多线程时不建议这样做)
- 改变迭代器中的“引用”的指向,不会影响数据源。
- 3、迭代过程中,如果备份中的expectedModCount和
- 原数据modCount的数值不一致,
- 会报ConcurrentModificationException异常。
本文深入解析迭代器的工作机制,包括modCount与expectedModCount的作用,以及如何避免在迭代过程中因并发修改而导致的ConcurrentModificationException异常。强调了通过迭代器删除元素的安全性,以及迭代过程中对数据源引用的处理。
274

被折叠的 条评论
为什么被折叠?



