黑马程序员技术交流社区
标题:
既然List是有序的,为什么还需要ListIterator?
[打印本页]
作者:
李哲
时间:
2012-3-29 15:23
标题:
既然List是有序的,为什么还需要ListIterator?
既然List是有序的,我们可以使用循环进行遍历,比如for循环,循环过程中应该也可以使用List本身的方法进行一些增删改查(不过,对于此点我没有进行代码的实验,冒昧。不过我觉得有序必然削弱Iterator存在的必要性,问题是削弱多少?),为什么还需要Iterator?
什么还有一个更强大的ListIterator?
作者:
马云
时间:
2012-3-29 15:33
本帖最后由 马云 于 2012-3-29 15:39 编辑
我来答:
此接口是在顶层接口中实现 的,如果不要的话那么map,set接口都看不到了,
实际上iterator的功能都是可以实现 的,但是java不是面向对象吗,所有的东西
尽量封装,向面向对象靠拢,综合上述,可能还有一些其它的因素所有它就存在了,
有时候不要想这么无聊的问题会给你的大脑减小很大的付担,再说也不要把java的创造都想成是万能的,
他也有疏漏没法解决的问题,所以我们现在要关心的是如何很好的去利用他的好入,扔掉坏的地方。
作者:
李哲
时间:
2012-3-29 15:40
说的好。现在要关心的是进入黑马,呵呵。
作者:
邵中国
时间:
2012-3-29 15:45
用着方便吧,统一
迭代使用
1) 访问一个容器对象的内容而无需暴露它的内部表示。
2) 支持对容器对象的多种遍历。
3) 为遍历不同的容器结构提供一个统一的接口(多态迭代)
作者:
贠(yun)靖
时间:
2012-3-29 18:17
本帖最后由 贠(yun)靖 于 2012-3-29 18:19 编辑
毕老师讲过的,在讲迭代器哪节就说由来了。
因为list集合 下面有很多集合容器,而每一种集合容器的去除方式都不同,是集合的底层结构造成的
但是每个集合都有 判断集合有没有下一个元素 有就取 没有就不取 所以就把所有集合的这种去除方式的共性封装成了Iterator接口
这就是为什么Iterator接口中为什么只有3个方法的原因 而其他的方法都是集合所特有的方法 所以就不能提取共性方法了
这样做是方便以后扩展用 如果添加一个新的集合 Iterator中的三个方法照样可以用
而Iterator集合就三个方法 有局限性 由于ArrayList集合有角标 所以就可以在遍历的时候增删改查 所以就专门为ArrayList集合设计了一个特有的迭代器
这是其他集合所不具备的
作者:
胡川
时间:
2012-3-29 18:22
当我们在使用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中的滚动结果集)。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2