gpt4 book ai didi

java - Java 中需要 Iterator 类吗?

转载 作者:搜寻专家 更新时间:2023-11-01 01:06:45 25 4
gpt4 key购买 nike

我知道这个问题可能很模糊。但我问这个的原因是因为这门课一定是在考虑了一些想法的情况下开设的。

在浏览 SO 上的几个问题时,我想到了这个问题。

考虑以下代码:

class A
{

private int myVar;

A(int varAsArg)
{
myVar = varAsArg;
}

public static void main(String args[])
{

List<A> myList = new LinkedList<A>();
myList.add(new A(1));
myList.add(new A(2));
myList.add(new A(3));

//I can iterate manually like this:
for(A obj : myList)
System.out.println(obj.myVar);

//Or I can use an Iterator as well:
for(Iterator<A> i = myList.iterator(); i.hasNext();)
{
A obj = i.next();
System.out.println(obj.myVar);
}
}
}

正如您从上面的代码中看到的那样,我可以使用 for 循环来替代迭代,而我可以使用 Iterator 类来做同样的事情' hasNext()next() 方法。类似地,可以有一个 remove() 方法的示例。有经验的用户评论了其他答案,使用 Iterator 类而不是使用 for 循环遍历 List。为什么?

更让我困惑的是 Iterator 类只有 three方法。这些功能也可以通过编写一些不同的代码来实现。

有些人可能会争辩说,许多类的功能可以通过编写自己的代码来实现,而不是使用为此目的制作的。是的。但正如我所说,Iterator 类只有三个方法。那么,既然可以使用简单的代码块来完成相同的工作,而且也不是太复杂而难以理解,那么为什么还要经历创建额外类的麻烦。


编辑:

虽然我在做这件事,但由于许多答案都说不使用 Iterator 就无法实现删除功能,所以我只想知道以下内容是否错误,或者是否会它有一些不良结果。

for(A obj : myList)
{
if(obj.myVar == 1)
myList.remove(obj);
}

上面的代码片段不是和 remove() 做同样的事情吗?

最佳答案

Iterator 早在您在 Java 的发展过程中展示的 for 语句之前就出现了。所以这就是它存在的原因。此外,如果您想删除某些内容,使用 Iterator.remove() 是唯一的方法(您不能为此使用 for 语句)。

关于java - Java 中需要 Iterator 类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10750327/

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