1

请告诉我for循环和迭代之间的区别?我什么时候应该使用/迭代?

前任:-

for(int i=0;i<arrayList.size();i++)
{
System.out.println(arrayList.get(i));
}


// using iterator
Iterator animalItr = animalList.iterator();

    while(animalItr.hasNext()) {
      String animalObj = (String)animalItr.next();
      System.out.println(animalObj);
}
4

3 回答 3

4

通过迭代器循环比通过索引更通用。迭代器可用于迭代任何集合。相比之下,位置索引是序列容器的技术细节。您可能希望成为这种特殊的唯一原因是容器的顺序性质是否是您的问题所固有的,并且您需要知道算法的数字位置。

但除此之外,一般来说,您应该更喜欢迭代器样式,因为它更通用,因此会导致更统一的代码。您的代码的不同部分可能使用不同的容器(或者您甚至可能希望稍后更改容器),但是如果您以相同的方式编写所有迭代,您将立即识别出迭代,而不是根据细节的不同而使用不同的样式容器。

也就是说,for当您只想对容器中的每个元素进行操作时,最好使用基于范围的循环,而不想修改整个容器作为一个整体(通过插入/删除)。当你说 时for (String s : arrayList) { /*...*/ },你甚至不需要在循环体中提及容器或任何迭代器的名称!考虑到这一点,迭代器(或索引)循环应该保留用于在循环内决定需要修改容器的情况,例如通过擦除当前元素,或者容器内元素的位置相关的情况。

于 2012-09-08T11:45:10.180 回答
0

当涉及到Iterable对象时,我个人会使用一个 for-each 循环:

for(Type t : iterableObject) {
 //body
}
于 2012-09-08T11:46:00.507 回答
0

使用 Iterator 遍历 Collection 是遍历 Collection 最安全、最快的方法。

对于像这里的 ArrayList 这样的集合,它们是由数组支持的,它可能没有什么区别。

使用 Iterator 的最佳原因之一是您可以安全地修改集合而无需引发ConcurrentModificationException

于 2012-09-08T11:54:14.523 回答