为什么这个java迭代器循环也是第一个元素?

问题描述 投票:0回答:3
import java.util.*;
public class IteratorDemo {

   public static void main(String args[]) {
      // Create an array list
      ArrayList al = new ArrayList();

      // add elements to the array list
      al.add("C");
      al.add("A");
      al.add("E");
      al.add("B");
      al.add("D");
      al.add("F");

      // Use iterator to display contents of al
      System.out.print("Original contents of al: ");
      Iterator itr = al.iterator();

      while(itr.hasNext()) {
         Object element = itr.next();
         System.out.print(element + " ");
      }
      System.out.println();
    }
  }

我不明白。如果al.iterator()返回al的第一个元素,为什么如果我在itr.next()中放置element(应该是我猜的第二个)然后打印element它会打印第一个元素而不是第二个元素?

我是java的新手。与c / c ++并行,Iterator就像指针一样,Iterator.next()就像解引用指针一样?当我在代码中执行操作时,有人可以向我解释实际上在低级别发生了什么吗?

java arraylist iterator
3个回答
2
投票

调用iterator()会返回列表中元素的迭代器,而不是第一个元素。事实上,如果这返回了第一个元素,那么条件while(itr.hasNext())就没有任何意义。

只有当你调用next()时才会返回迭代中的下一个元素。

所以,如果你想排除第一个元素,那么你需要做:

 if(itr.hasNext()) itr.next();

在循环之前。

另外,作为一个旁边我建议你使用参数化类型而不是原始类型,即你的ArrayList应该被声明为ArrayList<String> al = new ArrayList<>();而你的迭代器应该被称为Iterator<String> itr = al.iterator();

鉴于在这种情况下你想要做的就是将元素打印到控制台,根本不需要使用Iterator,因为它更简单:

 al.forEach(element -> System.out.print(element + " "));

1
投票

al.iterator()不返回al的第一个元素。

enter image description here

你可以想象这张照片中的迭代器。方法iterator()提供了一个迭代器,以便您可以遍历列表的元素。当你调用它时,它不会给出第一个元素。每次调用next()方法时,它都会抓取下一个元素。这就是为什么当你第一次调用next()时它会给你第一个元素。


0
投票

al.iterator()javadoc)将Iterator返回到集合(在本例中为您的ArrayList)而不是第一个元素。然后你使用迭代器迭代集合的元素(使用hasNextnext

© www.soinside.com 2019 - 2024. All rights reserved.