黑马程序员技术交流社区
标题:
关于Iterator的问题
[打印本页]
作者:
huangkj
时间:
2014-11-24 23:21
标题:
关于Iterator的问题
Iterator不是接口么,里面的方法肯定也都是抽象方法,为啥还能用hasNest(); 和next(); 来遍历集合呢?
作者:
杨佳名
时间:
2014-11-25 00:12
本帖最后由 杨佳名 于 2014-11-25 00:17 编辑
Iterator是集合的一种遍历方式。因为具体的集合不同,所采用的的数据排列方式就会不同,遍历的方式就会不一样。所以Iterator只定义成一个接口。拿ArrayList的Iterator举例,查看源码:
public interface Iterator
{
public abstract boolean hasNext();
public abstract Object next();
}
public interface Collection
{
public abstract Iterator iterator();
}
public interface List extends Collection
{
...
}
public class ArrayList implements List
{
public Iterator iterator() {
return new Itr();
}
private class Itr implements Iterator {
public boolean hasNext() {
return xxx;
}
public E next() {
return xxx;
}
}
}
复制代码
其中...和xxx省略了代码中具体内容,不影响阅读就好。
可以看出,Iterator it = c.iterator(); 是把Itr对象返回来了,而Itr已经实现了Iterator接口,这里是多态的表现。也表明了,虽然每种集合的数据结构不同,但都根据自己的特点,底层实现了Iterator,所以集合都可以用Iterator来进行遍历。
作者:
yninggis
时间:
2014-11-25 00:29
看我这样理解对不对:这是一个多太的体现。Iterator是接口,但是每个元素里面都实现了Iterator。调用iterator()方法(hasNest(); 和next(); )来获取Iterator接口的子类对象,利用接口的子类对象来调用接口中的方法当然可以了。以上是我的个人理解,谢谢!
作者:
zhangyangLengen
时间:
2014-11-25 16:17
其实Iterator接口在ArrayList集合中是以内部类的形式进行体现的。外部类提供一个访问内部类对象的公共的方法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2