三种形式的循环几乎相同。增强
for循环:
for (E element : list) { . . .}根据Java语言规范,其作用与显式使用带有传统循环的迭代器相同
for。在第三种情况下,只能通过删除当前元素来修改列表内容,然后,仅当你通过
remove迭代器本身的方法进行操作时,才能删除列表内容。使用基于索引的迭代,你可以自由地以任何方式修改列表。但是,添加或删除当前索引之前的元素可能会导致循环跳过元素或多次处理同一元素;进行此类更改时,你需要适当地调整循环索引。
在所有情况下,
element都是对实际列表元素的引用。没有一种迭代方法可以复制列表中的任何内容。内部状态的更改
element将始终在列表上相应元素的内部状态中显示。
本质上,只有两种方法可以遍历列表:使用索引或使用迭代器。增强的for循环只是Java 5中引入的语法快捷方式,以避免显式定义迭代器的繁琐工作。对于这两种款式,你可以拿出本质琐碎的变化使用for,while或do while块,但他们都归结为同样的事情(或者说,两件事情)。
编辑:正如@ iX3在注释中指出的那样,你可以
ListIterator在迭代时使用a 设置列表的当前元素。你将需要使用
List#listIterator()而不是
List#iterator()来初始化循环变量(显然,必须将其声明为
ListIterator而不是
Iterator)。



