在Java中使用迭代器有什么好处

我正在浏览以下代码示例:

public class GenericTest { public static void main (String[] args) { ArrayList myList = new ArrayList(); String s1 = "one"; String s2 = "two"; String s3 = "three"; myList.add(s1); myList.add(s2); myList.add(s3); String st; Iterator itr = myList.iterator(); while (itr.hasNext()) { st = itr.next(); System.out.println(st); } } } 

我想知道使用Iterator接口的实现而不是使用普通的for-each循环有什么好处?

  for ( String str : myList ) { System.out.println(str); } 

如果这个例子不相关,那么当我们应该使用Iterator时会有什么好处呢?

谢谢。

For-Each Loop是用Java 5引入的,所以它不是那么“旧”。

如果您只想迭代一个集合,则应该使用for each循环

 for (String str : myList) { System.out.println(str); } 

但有时候,“普通旧” 迭代器hasNext()方法对于检查迭代器是否有更多元素非常有用。

 for (Iterator it = myList.iterator(); it.hasNext(); ) { String str = it.next(); System.out.print(str); if (it.hasNext()) { System.out.print(";"); } } 

您也可以调用it.remove()来删除next返回的最新元素。

还有it.next() ListIterator ,它提供双向遍历it.next()it.previous()

所以,它们并不等同。 两者都是必需的。

基本上,foreach循环是迭代器最常用的捷径。 这是,遍历所有元素。 但是有一些不同之处:

  • 您可以直接使用foreach循环遍历数组
  • 您可以使用迭代器删除对象,但不能使用foreach循环执行此操作
  • 有时将迭代器传递给函数(特别是递归函数)很有用
 for ( String str : myList ) { System.out.println(str); } 

这段代码实际上会使用myList.Iterator来迭代列表。

从java 5开始添加新的for循环,以便更容易地对集合和数组进行迭代。

通过Iterator,Java Collection中的每个实现都可以有自己的迭代方式(List,Set,LinkedList,Map或….)

您也可以在自定义类中实现此接口。 让其他代码迭代你对象中的元素。

如果您只是在集合/数组上进行迭代,我认为在大多数情况下使用任何一个都没有任何性能优势。 但根据您的使用情况,用法可能会有所不同。

  • 如果你的情况只是遍历列表,那么从Java 1.5开始,应该优先使用for循环。
  • 但是如果你的情况是在迭代时操纵集合你需要使用Iterator接口。

迭代器是对集合实现方式的抽象。 它允许您一次查看整个集合中的一个项目,可选择删除项目。

迭代器的缺点是,如果您知道底层实现,它可能会很慢。 例如,对于ArrayList使用Iterator比为每个元素调用ArrayList.get(i)要慢得多。 这是否重要取决于代码的作用。

在几乎所有情况下,这两者在操作和性能上是等效的。 唯一的区别是旧版本的Java JVM支持迭代器,而新的“for”语法仅在JSDK 1.5(“Java 5”)中引入,有些人希望保持与1.4或更早版本兼容。