黑马程序员技术交流社区

标题: 迭代器的问题 [打印本页]

作者: 邢晏玮    时间: 2012-11-7 21:44
标题: 迭代器的问题
本帖最后由 邢晏玮 于 2012-11-9 15:54 编辑

在看毕老师的视频的时候遇到了一个问题理解不了为什么是这样的
  1. public static void main(String[] args)
  2.         {
  3.                 ArrayList al = new ArrayList();

  4.                 al.add("java01");
  5.                 al.add("java02");
  6.                 al.add("java03");
  7.                 Iterator it = al.iterator();
复制代码
这个地方为什么是Iterator it = al.iterator(); 为什么是一个对象.一个方法就成了Iterator接口的子类对象啊
作者: 葬天    时间: 2012-11-7 21:54
由于每个集合的底层数据结构不同,
所以 迭代器实现也不同,因此定义成内部类的形式,
然后通过该类的一个方法,iterator()返回内部类的实例

作者: 杨雪松    时间: 2012-11-7 22:01
al.iterator();的意思是用集合的对象al来调用iterator()方法,
而iterator()方法返回来的就是一个Iterator接口的子类对象 it
在jdk的api中是这么写的:

iterator
Iterator<T> iterator()返回一个在一组 T 类型的元素上进行迭代的迭代器。

返回:
一个迭代器。


从这里也可以看出它返回的是Iterator接口的子类对象
作者: 王振    时间: 2012-11-7 22:07
首先要做到2点:
1、理解函数的定义,知道返回值类型是干什么用的。
2、能够查API。

如果上面2点楼主都清楚的话,那就好讲了。
API中是这样定义的:     public Iterator<E> iterator()
这一点应该理解吧

继续往下讲,这里返回的肯定是一个Iterator接口的实现类对象,至于怎么实现这个过程的,需要看源代码。
下面是源码:
  1. public Iterator<E> iterator() {
  2.         return new Itr();
  3.     }

  4. private class Itr implements Iterator<E> {
  5.     //code....
  6. }
复制代码
你可以看到,里面其实是返回了一个Itr的实例对象,而Itr是一个实现了Iterator接口的内部类。

这样可以理解了吗?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2