gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:52:48 25 4
gpt4 key购买 nike

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() 是否像取消引用的指针?有人可以向我解释当我执行代码中的操作时,底层实际上发生了什么吗?

最佳答案

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

仅当您调用 next() 时才会出现此情况返回迭代中的下一个元素。

因此,如果您想排除第一个元素,则需要执行以下操作:

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

循环之前。

此外,顺便说一句,我建议您使用参数化类型而不是原始类型,即您的 ArrayList应声明ArrayList<String> al = new ArrayList<>();你的迭代器为 Iterator<String> itr = al.iterator(); .

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

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

关于java - 为什么这个java迭代器循环也打印第一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48139741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com