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

chr*_*cal 15 java

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

public class GenericTest {

 public static void main (String[] args) {

  ArrayList<String> myList = new ArrayList<String>();
  String s1 = "one";
  String s2 = "two";
  String s3 = "three";

  myList.add(s1); myList.add(s2); myList.add(s3);
  String st;

  Iterator<String> itr = myList.iterator();

  while (itr.hasNext()) {
   st = itr.next();
   System.out.println(st);
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

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

 for ( String str : myList ) {
  System.out.println(str);
 }
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

sin*_*pop 22

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

  • 您可以直接使用foreach循环遍历数组
  • 您可以使用迭代器删除对象,但不能使用foreach循环执行此操作
  • 有时将迭代器传递给函数(特别是递归函数)很有用


Sou*_*ink 11

for-each循环与Java 5中引入的,所以它不是那么"老".

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

for (String str : myList) {
   System.out.println(str);
}
Run Code Online (Sandbox Code Playgroud)

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

for (Iterator<String> it = myList.iterator(); it.hasNext(); ) {
   String str = it.next();
   System.out.print(str);
   if (it.hasNext()) {
      System.out.print(";");     
   }
}
Run Code Online (Sandbox Code Playgroud)

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

并且有ListIterator<E>提供双向遍历it.next()it.previous().

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