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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fabin5 中级黑马   /  2012-10-1 17:04  /  1927 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Iterator it = al.iterator();    这句话我一直都理解不了,能不能给解释一下

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 新人加油 国庆快乐

查看全部评分

5 个回复

倒序浏览
本帖最后由 娇赛赛 于 2012-10-1 17:48 编辑

这个问题很简单啊!Iterator是一个接口,我们都说集合里面实现了Iterator其实是在每一种集合的内部都实现了具体的Iterator的子类,这个子类是一个内部类。然后,通过ArrayList的实例对象返回的其实是Iterator具体实现类的对象,你这个表达式=号后面的那个获取到的是其实是al表示的这种集合里面具体的Iterator的子类对象。
建议你去看看ArrayList的源码,下面两个图是ArrayList里面的源码,我给你指出了要点部分

其实每一个具体的集合类中都有一个实现了Iterator的内部类,建议你进源码里面看看,收获肯定会很大的。
别看着前面是Iterator就以为所有的集合返回的iterator对象是相同的,这是面向接口编程,让代码的灵活性更高了而已。

希望能对你有用,谢谢。^^

下面上图:
图一:ArrayList中对iterator()方法的复写:

图二:ArrayList中的Iterator实现类,注意,他是内部类而且是私有的哟,他也只适用于ArrayList。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 国庆快乐

查看全部评分

回复 使用道具 举报
       楼上说的比较详细,我补充下,迭代器的作用是提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示,java collection 中的设计把迭代器的具体实现和collection绑定在一起了,也就是上面说的私有内部类
回复 使用道具 举报
集合中有个方法就是iterator(),他的内部其实就是定义了一个迭代器,其实有迭代器 iterator这个类,但是因为他被封装了,隐藏了,你看不见,要获得他的实例,只有调用iterator()方法
回复 使用道具 举报
集合中的根接口是Collection接口,集合中的类都间接或直接继承或实现它,而Collection继承了Iterable接口,Iterable接口中的唯一一个方法就是
iterator方法。
Iterator<T> iterator()
返回一个在一组 T 类型的元素上进行迭代的迭代器。
返回:一个迭代器。
所以,只要是集合类就有这么一个方法返回一个迭代器。Iterator也是一个接口。你可以自己看看API.
回复 使用道具 举报
本帖最后由 覃宏海 于 2012-10-2 09:58 编辑

Iterator it = al.iterator();    这句话我一直都理解不了,能不能给解释一下

Iterator----------------------------->Iterator是一个类,类名叫做Iterator。
it -------------------------------------->it 就是你自定义的一个变量,叫什么名字都可以,由你,但不能是特殊字。
al------------------------------------> al是你前面定义过的某个集合的对象。这个集合有迭代器的功能。
iterator()------------------------------>iterator()是一个方法,迭代方法。用于取出集合中的元素。它是Collection接口里的一个方法。调用它时返回的是Iterator。


你定义了一变量it,同时把al中的iterator()方法的返回值赋予it,并且这个it的返回值是Iterator类型的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马