黑马程序员技术交流社区
标题:
关于迭代
[打印本页]
作者:
fabin5
时间:
2012-10-1 17:04
标题:
关于迭代
Iterator it = al.iterator(); 这句话我一直都理解不了,能不能给解释一下
作者:
徐-星星
时间:
2012-10-1 17:45
本帖最后由 娇赛赛 于 2012-10-1 17:48 编辑
这个问题很简单啊!Iterator是一个接口,我们都说集合里面实现了Iterator其实是在每一种集合的内部都实现了具体的Iterator的子类,这个子类是一个内部类。然后,通过ArrayList的实例对象返回的其实是Iterator具体实现类的对象,你这个表达式=号后面的那个获取到的是其实是al表示的这种集合里面具体的Iterator的子类对象。
建议你去看看ArrayList的源码,下面两个图是ArrayList里面的源码,我给你指出了要点部分
其实每一个具体的集合类中都有一个实现了Iterator的内部类,建议你进源码里面看看,收获肯定会很大的。
别看着前面是Iterator就以为所有的集合返回的iterator对象是相同的,这是面向接口编程,让代码的灵活性更高了而已。
希望能对你有用,谢谢。^^
下面上图:
图一:ArrayList中对iterator()方法的复写:
1.jpg
(13.82 KB, 下载次数: 24)
下载附件
2012-10-1 17:46 上传
图二:ArrayList中的Iterator实现类,注意,他是内部类而且是私有的哟,他也只适用于ArrayList。
2.jpg
(68.31 KB, 下载次数: 23)
下载附件
2012-10-1 17:46 上传
作者:
黄小贝
时间:
2012-10-1 20:11
楼上说的比较详细,我补充下,迭代器的作用是提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示,java collection 中的设计把迭代器的具体实现和collection绑定在一起了,也就是上面说的私有内部类
作者:
广驰
时间:
2012-10-1 22:09
集合中有个方法就是iterator(),他的内部其实就是定义了一个迭代器,其实有迭代器 iterator这个类,但是因为他被封装了,隐藏了,你看不见,要获得他的实例,只有调用iterator()方法
作者:
翁鹏
时间:
2012-10-1 22:16
集合中的根接口是Collection接口,集合中的类都间接或直接继承或实现它,而Collection继承了Iterable接口,Iterable接口中的唯一一个方法就是
iterator方法。
Iterator<T> iterator()
返回一个在一组 T 类型的元素上进行迭代的迭代器。
返回:一个迭代器。
所以,只要是集合类就有这么一个方法返回一个迭代器。Iterator也是一个接口。你可以自己看看API.
作者:
覃宏海
时间:
2012-10-2 09:55
本帖最后由 覃宏海 于 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类型的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2