【发布时间】:2015-08-28 23:22:14
【问题描述】:
我正在学习 Java 课程,但无法完全理解下一课的内容。
目的:本课的目的是通过创建一个模拟 for-each 循环如何工作的替代方案来解释 for-each 循环的工作原理。
上一课对for-each循环的解释很简单:
import java.util.ArrayList //Imports ArrayList CLASS
public class ForEachLoops
{
public static void main(String[] args)
{
ArrayList<Integer> numbers = new ArrayList<Integer>();
// ^ Creates ArrayList object & calls constructor
for(int i = 1; i < 11; ++i)
numbers.add(i); //Just adding numbers 1-10 to the ArrayList.
for(int n : numbers) //For-Each Loop
System.out.println(n); //Returns value from each ArrayList element
}
}
在下一课中,讲师展示了如何创建 for-each 循环的替代/模拟器。它的工作原理如下:
import java.util.ArrayList; //Importing ArrayList class from package
import java.util.Iterator; // Question 1 (See Below)
public class Chap16Part9
{
public static void main(String[] args)
{
ArrayList<Integer> numbers = new ArrayList<Integer>();
// ^ Creating object of ArrayList & calling constructor
for(int i = 1; i < 11; ++i)
numbers.add(i); //Just adding numbers 1-10 to ArrayList object
for(Iterator<Integer> n = numbers.iterator(); n.hasNext();) {
// ^ Question 2 (See Below)
int num = n.next(); //Points to the next element to assign value.
System.out.println(num); //Prints current value of "num."
}
}
}
问题1:阅读Java文档后,“Iterator”被列为接口。这仍然与导入类相同吗?例如,在 Java 文档中,“java.util.Scanner”被认为是一个类,而不是一个接口。
问题 2:在问问题之前,循环不需要实现“++i”类型的控件,因为 Iterator 的 hasNext() 方法会检查是否有另一个元素去检查。如果没有,则停止。这是一个布尔值。然而,循环的开始,循环控制变量(LCV)是“Iterator<Integer> n = numbers.iterator();”,我不太明白这是什么意思。在我眼里,我看到了一个Iterator类的对象?设置为等于 ArrayList iterator() 方法。可能是因为给定“java.util.Interator;”被认为是一个接口(基本上是一个声明了如果由一个类实现则必须实现的方法的合约),ArrayList 类完成了 ArrayList 类中声明的 iterator() 方法的语句集,因此,需要以这种方式调用,而不是像调用传统类那样由构造函数调用(例如,ArrayList)?我对此有点困惑,我希望有人能阐明这一点。谢谢!
【问题讨论】:
-
对于“Iterator n = numbers.iterator()”,我的意思是输入“Iterator
n = numbers.iterator()” -
为了避免
<whatever>被视为 HTML 标签而不是被显示的问题,总是使用`包装代码片段。 -
The tutorial on for-each 解释得很好。
-
访问迭代器documentation 解决所有问题。
-
ArrayListis (implements)Listwhich is (extends) @987654330@ which is (extends) @987654331@ (注意它不是Iterator,而是Iterable目的是确保类可以通过调用iterator()方法返回Iterator)。
标签: java loops foreach iterator