首先看一段code

Iterator迭代那点事_迭代


运行结果:

Iterator迭代那点事_迭代器_02

为什么会这样呢?

Iterator迭代器采用的是快速失败(fail-fast)机制,一旦在迭代过程中检测到该集合已经被

修改(程序中其他线程修改),程序立即引发ConcurrentModificationException异常,

而不是显示修改后的结果,这样可以避免共享资源而引发的潜在问题。


Other example

Iterator迭代那点事_迭代器_03

运行结果:

Iterator迭代那点事_java_04

这又是为什么呢?

可以这样理解,删除中间的数,后面的数就找不到了。

(但仍要避免此类)


那到底能不能再Iterator中迭代时,删除呢。

EXAMPLE:

Iterator迭代那点事_迭代_05

运行结果:

Iterator迭代那点事_迭代_06


总结:

1.Iterator本身并不提供盛装对象的能力。

2.如果要创建一个Iterator对象,则必须有一个被迭代的集合。

3.当Iterator迭代访问Collection集合元素时,Collection集合里的元素不会被改变,

只有通过Iterator的remove()方法删除上一次next()方法返回的集合元素才可以;

否则将会引发java.util.ConcurrentModificationException异常。




最后关于ArrayList与Iterator为什么会出现这种不同步现象,可以参考下面的:

​http://guojuanjun.blog.51cto.com/277646/1348450/​