中易网

java Iterator<E>的问题

答案:2  悬赏:0  
解决时间 2021-04-06 14:43
接口是不能被实例化的,接口中的方法都是没有方法体的抽象方法。
那么请问:
List list=new Arraylist();
list.add( "aaa ");
list.add( "bbb ");
Iterator it=list.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
Iterator是一个接口,为什么它可以被实例化?就是Iterator it=list.iterator();这句,list.iterator()方法返回了一个Iterator的对象。接口中的方法都是没有方法体的抽象方法。为什么可以直接用it.hasNext(),it.next()),这些没有方法体的方法。没有方法体的方法应该什么都没实现啊?
最佳答案
java.util包里关于List有很多的对应的实现,Iterator是为了满足遍历的需求写的一个接口。因为相关的内容很多,而且大体都是一个模式,所以我举例说明。

在你这里采用了ArrayList来实例化一个List,所以对应的Iterator接口是在ArrayList里实现的。
我们可以找一下jdk源代码:
public class ArrayList extends AbstractList
AbstractList extends AbstractCollection
AbstractCollection implements Collection
Collection extends Iterable

终于找到了这个,我们确定了,ArrayList对于Iterable的实现是在AbstractCollection这一层实现了Iterable接口。而这个接口的内容是:public interface Iterable {


Iterator iterator();
}
具体的实现在ArrayList这个类里,
private class Itr implements Iterator
你可以找源代码看一下,这个内部类实现了Iterator的所有内容。

到这里,你肯定已经明白了,实际上并不是没有实现,只是实现的过程比较曲折了一些。

这里,JDK在实现上采用了Iterator模式,这个模式的大体意义是让被遍历体与遍历的具体实现分离,只要实现Iterable接口即可通过得到一个Iterator来完成遍历。具体的内容你可以上网再搜搜看。
全部回答
用iterator模式实现遍历集合 iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。 例如,如果没有使用iterator,遍历一个数组的方法是使用索引: for(int i=0; i
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯