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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© x378320002 中级黑马   /  2013-6-11 15:48  /  3676 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 x378320002 于 2013-6-12 12:47 编辑

迭代器是集合内的一个内部类,里面定义了一些取元素的方法,使用时用iterator方法返回一个内部类的
实例然后再调用这些方法,这里为什么要用迭代器呢?也就是为什么非要把这些方法定义在内部类里,
我觉得视乎直接把这些方法定义在集合里也可以啊,就像add,remove,等方法,直接用集合调用不就行了?
干嘛要弄一个迭代器这东西啊,像add等方法也可以弄个什么添加器的内部类,弄个方法返回这个添加器
再调用add,这不是多此一举吗

评分

参与人数 1技术分 +1 收起 理由
夜默 + 1

查看全部评分

4 个回复

倒序浏览
你存入内存里面的数据如果不通过遍历是显示不出来的。。。而迭代器就是一种很方便的遍历方法,格式统一,在JDK2.5以后出现了泛型就更方便了。
回复 使用道具 举报
本帖最后由 小冰块 于 2013-6-11 16:29 编辑

迭代器(Iterator)模式,又叫做游标(Cursor)模式。迭代器提供一种对容器对象中的各个元素进行访问的方法,而又不需暴露该对象的内部细节。

从定义可见,迭代器模式是为容器而生。  很明显,对容器对象的访问必然涉及到遍历算法。你可以将遍历方法写到容器对象中去(内部迭代器);或者根本不去提供什么遍历算法,让使用容器的人自己去实现去吧(外部迭代器)。这两种情况好像都能够解决问题。 然而在前一种情况,容器承受了过多的功能,它不仅要负责自己“容器”内的元素维护(添加、删除等等),而且还要提供遍历自身的接口;而且由于遍历状态保存的问题,不能对同一个容器对象同时进行多个遍历。第二种方式倒是省事,却又将容器的内部细节暴露无遗。   

而迭代器模式的出现,很好的解决了上面两种情况的弊端。

由于迭代器模式本身的规定比较松散,所以具体实现也就五花八门。我们先来列举下迭代器模式的实现方式。  

1.迭代器角色定义了遍历的接口,但是没有规定由谁来控制迭代。在Java collection的应用中,是由客户程序来控制遍历的进程,被称为外部迭代器
还有一种实现方式便是由迭代器自身来控制迭代,被称为内部迭代器
外部迭代器要比内部迭代器灵活、强大,而且内部迭代器在java语言环境中,可用性很弱

2.在迭代器模式中没有规定谁来实现遍历算法。好像理所当然的要在迭代器角色中实现。因为既便于一个容器上使用不同的遍历算法,也便于将一种遍历算法应用于不同的容器。
但是这样就破坏掉了容器的封装——容器角色就要公开自己的私有属性,在java中便意味着向其他类公开了自己的私有属性。  
那我们把它放到容器角色里来实现好了。这样迭代器角色就被架空为仅仅存放一个遍历当前位置的功能。
但是遍历算法便和特定的容器紧紧绑在一起了。  
而在Java Collection的应用中,提供的具体迭代器角色是定义在容器角色中的内部类。
这样便保护了容器的封装。但是同时容器也提供了遍历算法接口,你可以扩展自己的迭代器。

评分

参与人数 1技术分 +1 收起 理由
夜默 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 j816326 于 2013-6-11 18:30 编辑

一样等个简单的解释
回复 使用道具 举报
小冰块 发表于 2013-6-11 16:23
迭代器(Iterator)模式,又叫做游标(Cursor)模式。迭代器提供一种对容器对象中的各个元素进行访问的方法 ...

这个解释好,这才是为什么要用迭代器理由,终于懂了,这是一种思想~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马