迭代器过程分析

迭代器过程分析

话不多说,上图
迭代器过程分析
迭代器过程分析
【注意】上图是通过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异常。