首先看一段code
运行结果:
为什么会这样呢?
Iterator迭代器采用的是快速失败(fail-fast)机制,一旦在迭代过程中检测到该集合已经被
修改(程序中其他线程修改),程序立即引发ConcurrentModificationException异常,
而不是显示修改后的结果,这样可以避免共享资源而引发的潜在问题。
Other example
运行结果:
这又是为什么呢?
可以这样理解,删除中间的数,后面的数就找不到了。
(但仍要避免此类)
那到底能不能再Iterator中迭代时,删除呢。
EXAMPLE:
运行结果:
总结:
1.Iterator本身并不提供盛装对象的能力。
2.如果要创建一个Iterator对象,则必须有一个被迭代的集合。
3.当Iterator迭代访问Collection集合元素时,Collection集合里的元素不会被改变,
只有通过Iterator的remove()方法删除上一次next()方法返回的集合元素才可以;
否则将会引发java.util.ConcurrentModificationException异常。
最后关于ArrayList与Iterator为什么会出现这种不同步现象,可以参考下面的: