我知道这个问题可能很模糊,但我之所以问这个问题,是因为这个班必须经过一些思考。
这个问题出现在我脑海中,
考虑以下代码:
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);
}
}
}
因此,从上述代码中可以看到,我可以用 < code> for cyol 来代替迭代,而我可以使用 < code> Iterator class class
类的其他答案,而不是使用 < code> for locs to exerate by hasNext ()
和 next ()
方法。同样,也可以用 remove ()
方法作为例子。经验丰富的用户评论了使用 < code> Iterator < list
。 为什么?
更让我困惑的是, Iterator
class < a href="http://docs.oracle.com/javase/1.4.2/docs/api/java/ util/ Iterator.html" rel="nofollow" > 三种 方法。这些方法的功能可以通过写一个略有不同的代码来实现。
有些人可能会争辩说,许多类的功能可以通过写入一个自有代码来实现,而不是使用为此而制作的 < code> class code > 。 是的, 确实如此。 但正如我所说, < code> Iterator code> class只有三种方法。 因此,为什么在同一个任务可以用一个简单的代码块来完成时,要经过繁琐的创建额外类的工作,而这个代码块也不是太复杂,无法理解。
编辑:
虽然我同意,因为许多答案都说,如果不使用 Iterator
,我就无法实现移除功能,所以我想知道以下内容是否是错误的,或者是否会产生一些不可取的结果。
for(A obj : myList)
{
if(obj.myVar == 1)
myList.remove(obj);
}
上述代码片断是否与 remove
做同样的事情?