A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邢晏玮 中级黑马   /  2012-11-7 21:44  /  1620 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邢晏玮 于 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接口的子类对象啊

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
由于每个集合的底层数据结构不同,
所以 迭代器实现也不同,因此定义成内部类的形式,
然后通过该类的一个方法,iterator()返回内部类的实例

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
al.iterator();的意思是用集合的对象al来调用iterator()方法,
而iterator()方法返回来的就是一个Iterator接口的子类对象 it
在jdk的api中是这么写的:

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

返回:
一个迭代器。


从这里也可以看出它返回的是Iterator接口的子类对象

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先要做到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接口的内部类。

这样可以理解了吗?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马