日期:2014-05-20  浏览次数:20653 次

集成接口里iterator()的方法是怎么实现的?
各位大哥:
小弟有一事不名,
集成接口里iterator()的方法是怎么实现的?
接口里的方法应该都是抽象的,那么在实际使用中,如下:
ArrayList   a=new   ArrayList();
Iterator   i   =   a.iterator();
while(i.hasNext())
{
Integer   intObj=(Integer)i.next();
sum+=intObj.intValue();
}
那么,Iterator   i   =   a.iterator();这一句的iterator()方法是怎么实现的呢,或者说是谁实现的呢!

------解决方案--------------------
对于ArrayList来说
其超类AbstractList中有一个内部类
private class Itr implements Iterator <E>
他实现了Iterator接口
然后通过
public Iterator <E> iterator() {
return new Itr();
}
返回这个内部类的对象.
这个内部类可以对AbstractList的成员变量,方法进行操作.

对于不同的容器,这个内部类的实现各不相同,
而其存在的目的是实现通用的遍历容器的方法

具体的可以看看各个容器实现的源码
------解决方案--------------------
ArrayList a=new ArrayList(); 这句通常这样写: List a=new ArrayList();
List 接口是定义为可以被iterate的,所以所有implements List 的class 都要去实现它。也是就是说要写一个Iterator 的实现。 你上边用到的就是ArrayList这个class实现的。 ArrayList实现起来比较简单,也就是让它的Iterator记住当前的位置,然后每一次用next()就把当前的element返回然后增加当前的位置。 hasNext()也就是去比较一下当前位置与array的长度。 你高兴也可以自己写一个ArrayList,不难。