java Iterator<E>的问题
接口是不能被实例化的,接口中的方法都是没有方法体的抽象方法。那么请问:Listlist=newArraylist();list.add("aaa");list.add("...
接口是不能被实例化的,接口中的方法都是没有方法体的抽象方法。
那么请问:
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()),这些没有方法体的方法。没有方法体的方法应该什么都没实现啊? 展开
那么请问:
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<E> extends AbstractList<E>
AbstractList<E> extends AbstractCollection<E>
AbstractCollection<E> implements Collection<E>
Collection<E> extends Iterable<E>
终于找到了这个,我们确定了,ArrayList对于Iterable的实现是在AbstractCollection这一层实现了Iterable接口。而这个接口的内容是:public interface Iterable<T> {
/**
* Returns an iterator over a set of elements of type T.
*
* @return an Iterator.
*/
Iterator<T> iterator();
}
具体的实现在ArrayList这个类里,
private class Itr implements Iterator<E>
你可以找源代码看一下,这个内部类实现了Iterator的所有内容。
到这里,你肯定已经明白了,实际上并不是没有实现,只是实现的过程比较曲折了一些。
这里,JDK在实现上采用了Iterator模式,这个模式的大体意义是让被遍历体与遍历的具体实现分离,只要实现Iterable接口即可通过得到一个Iterator来完成遍历。具体的内容你可以上网再搜搜看。
在你这里采用了ArrayList来实例化一个List,所以对应的Iterator接口是在ArrayList里实现的。
我们可以找一下jdk源代码:
public class ArrayList<E> extends AbstractList<E>
AbstractList<E> extends AbstractCollection<E>
AbstractCollection<E> implements Collection<E>
Collection<E> extends Iterable<E>
终于找到了这个,我们确定了,ArrayList对于Iterable的实现是在AbstractCollection这一层实现了Iterable接口。而这个接口的内容是:public interface Iterable<T> {
/**
* Returns an iterator over a set of elements of type T.
*
* @return an Iterator.
*/
Iterator<T> iterator();
}
具体的实现在ArrayList这个类里,
private class Itr implements Iterator<E>
你可以找源代码看一下,这个内部类实现了Iterator的所有内容。
到这里,你肯定已经明白了,实际上并不是没有实现,只是实现的过程比较曲折了一些。
这里,JDK在实现上采用了Iterator模式,这个模式的大体意义是让被遍历体与遍历的具体实现分离,只要实现Iterable接口即可通过得到一个Iterator来完成遍历。具体的内容你可以上网再搜搜看。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询