集合在循环遍历时候,有两种常用方式:

一种foreach方式:

1
for(Object o : collection){}

另一种iterator迭代器方式:

1
2
3
for(Iterator iter = collection.iterator();iter.hasNext()){}
//或者
while(collection.iterator().hasNext()){Object o = collection.iterator().next()}

foreach方式比较简洁,不容易出错,不必关心下表的起始值和终止值,但是其最终还是iterator来实现的.

两种方式的区别就是在于它们的remove()方法上,如果你有需求需要循环删除元素,就不能调用集合的remove()方法,会导致循环出错.这时候就需要使用iterator迭代器的remove()方法.

循环过程中list.size()的大小变化了,就导致了错误。 所以,如果想在循环语句中删除集合中的某个元素,就要用迭代器iterator的remove()方法,因为它的remove()方法不仅会删除元素,还会维护一个标志,用来记录目前是不是可删除状态,例如,你不能连续两次调用它的remove()方法,调用之前至少有一次next()方法的调用。

forEach就是为了让用iterator循环访问的形式简单,写起来更方便。当然功能不太全,所以但如有删除操作,还是要用它原来的形式。

参考资料:http://blog.csdn.net/zxq1138634642/article/details/8092327