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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

5 个回复

倒序浏览
本帖最后由 马云 于 2012-3-29 15:39 编辑

我来答:
此接口是在顶层接口中实现 的,如果不要的话那么map,set接口都看不到了,
实际上iterator的功能都是可以实现 的,但是java不是面向对象吗,所有的东西
尽量封装,向面向对象靠拢,综合上述,可能还有一些其它的因素所有它就存在了,
有时候不要想这么无聊的问题会给你的大脑减小很大的付担,再说也不要把java的创造都想成是万能的,
他也有疏漏没法解决的问题,所以我们现在要关心的是如何很好的去利用他的好入,扔掉坏的地方。
回复 使用道具 举报
说的好。现在要关心的是进入黑马,呵呵。
回复 使用道具 举报
用着方便吧,统一
迭代使用
1) 访问一个容器对象的内容而无需暴露它的内部表示。
2) 支持对容器对象的多种遍历。
3) 为遍历不同的容器结构提供一个统一的接口(多态迭代)
回复 使用道具 举报
本帖最后由 贠(yun)靖 于 2012-3-29 18:19 编辑

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

    而Iterator集合就三个方法 有局限性  由于ArrayList集合有角标  所以就可以在遍历的时候增删改查  所以就专门为ArrayList集合设计了一个特有的迭代器
    这是其他集合所不具备的
回复 使用道具 举报
当我们在使用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中的滚动结果集)。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马