我知道这个问题可能很模糊。但我问这个的原因是因为这门课一定是经过深思熟虑的。
在浏览 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
类只有三个方法。这些功能也可以通过编写一些不同的代码来实现。
有些人可能会争辩说,许多类的功能可以通过编写自己的代码来实现,而不是使用class
make 来实现。是的,没错。但正如我所说,Iterator
类只有三个方法。那么,当同样的工作可以用一个简单的代码块完成时,为什么还要麻烦创建一个额外的类,这也不是太复杂而难以理解。
编辑:
虽然我在这里,但由于许多答案都说我无法在不使用的情况下实现删除功能Iterator
,所以我只想知道以下内容是否错误,或者是否会产生一些不良结果。
for(A obj : myList)
{
if(obj.myVar == 1)
myList.remove(obj);
}
上面的代码片段不是做同样的事情remove()
吗?