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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

既然List是有序的,我们可以使用循环进行遍历,比如for循环,循环过程中应该也可以使用List本身的方法进行一些增删改查(不过,对于此点我没有进行代码的实验,冒昧。不过我觉得有序必然削弱Iterator存在的必要性,问题是削弱多少?),为什么还需要Iterator?
什么还有一个更强大的ListIterator?

5 个回复

正序浏览
当我们在使用List,Set的时候,为了实现对其数据的遍历,我们经常使用到了Iterator(跌代器)。
使用跌代器,你不需要干涉其遍历的过程,只需要每次取出一个你想要的数据进行处理就可以了。但是在使用的时候也是有不同的。
List和Set都有iterator()来取得其迭代器。对List来说,你也可以通过listIterator()取得其迭代器,两种迭代器在有些时候是不能通用的,Iterator和ListIterator主要区别在以下方面:
1.    ListIterator有add()方法,可以向List中添加对象,而Iterator不能
2.    ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。
3.    ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。
4.    都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。因为ListIterator的这些功能,可以实现对LinkedList等List数据结构的操作。
其实,数组对象也可以用迭代器来实现。
org.apache.commons.collections.iterators.ArrayIterator就可以实现此功能
一般情况下,我们使用Iterator就可以了,如果你需要进行记录的前后反复检索的话,你就可以使用ListIterator来扩展你的功能,(有点象JDBC中的滚动结果集)。
回复 使用道具 举报
本帖最后由 贠(yun)靖 于 2012-3-29 18:19 编辑

  毕老师讲过的,在讲迭代器哪节就说由来了。
因为list集合  下面有很多集合容器,而每一种集合容器的去除方式都不同,是集合的底层结构造成的
  但是每个集合都有  判断集合有没有下一个元素  有就取 没有就不取    所以就把所有集合的这种去除方式的共性封装成了Iterator接口
   这就是为什么Iterator接口中为什么只有3个方法的原因   而其他的方法都是集合所特有的方法  所以就不能提取共性方法了  
这样做是方便以后扩展用  如果添加一个新的集合 Iterator中的三个方法照样可以用

    而Iterator集合就三个方法 有局限性  由于ArrayList集合有角标  所以就可以在遍历的时候增删改查  所以就专门为ArrayList集合设计了一个特有的迭代器
    这是其他集合所不具备的
回复 使用道具 举报
用着方便吧,统一
迭代使用
1) 访问一个容器对象的内容而无需暴露它的内部表示。
2) 支持对容器对象的多种遍历。
3) 为遍历不同的容器结构提供一个统一的接口(多态迭代)
回复 使用道具 举报
说的好。现在要关心的是进入黑马,呵呵。
回复 使用道具 举报
本帖最后由 马云 于 2012-3-29 15:39 编辑

我来答:
此接口是在顶层接口中实现 的,如果不要的话那么map,set接口都看不到了,
实际上iterator的功能都是可以实现 的,但是java不是面向对象吗,所有的东西
尽量封装,向面向对象靠拢,综合上述,可能还有一些其它的因素所有它就存在了,
有时候不要想这么无聊的问题会给你的大脑减小很大的付担,再说也不要把java的创造都想成是万能的,
他也有疏漏没法解决的问题,所以我们现在要关心的是如何很好的去利用他的好入,扔掉坏的地方。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马