用一个例子来说明迭代器的使用:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorDemo
{
public static void main(String[] args)
{
Collection coll=new ArrayList(); //创建一个集合对象,因为Collection是一个接口,所有要new它的一个子类来创建对象,这个子类是随意的
//在集合中添加元素
coll.add("abc1");
coll.add("abc2");
coll.add("abc3");
coll.add("abc4");
//使用Collection中的iterator()方法。调用集合中的迭代器方法,是为了获取集合中的迭代器对象
Iterator it=coll.iterator(); //it是迭代器对象
while(it.hasNext()) //如果仍有元素可以迭代,返回true
{
System.out.println(it.next()); //输出迭代的下一个元素
}
}
}
运行结果:
这样的代码是正确的,但是it对象在创建后没有被释放,仍然存在内存中,耗费资源,所以我们可以用另一种方式改写代码:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorDemo
{
public static void main(String[] args)
{
Collection coll=new ArrayList(); //创建一个集合对象,因为Collection是一个接口,所有要new它的一个子类来创建对象,这个子类是随意的
//在集合中添加元素
coll.add("abc1");
coll.add("abc2");
coll.add("abc3");
coll.add("abc4");
//使用Collection中的iterator()方法。调用集合中的迭代器方法,是为了获取集合中的迭代器对象
for(Iterator it=coll.iterator();it.hasNext();)
{
System.out.println(it.next());
}
}
}
运行结果:
注:迭代器对象(通过内部类实现)必须依赖于具体容器,因为每一个容器的数据结构都不同,所以该迭代器对象是在容器中进行内部实现的。对于容器使用者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,也就是iterator方法。
Iterator接口就是对所有的Collection容器进行元素取出的公共接口。