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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于海生 黑马帝   /  2011-12-31 12:06  /  2336 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 于海生 于 2012-1-1 07:52 编辑

java中for循环和iterator迭代有什么区别?

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 郝锡强 于 2011-12-31 12:17 编辑

记录的存取方式有两种:一种是顺序存储,另一种是链接存储
对于顺序存储的记录可以根据其下标找到对应的记录,而链接存储(拿单链表为例)
则必须找到其前一个记录的位置才能够找到本记录。

所以for循环便于访问顺序存储的记录,比如数组等
而迭代则更适用于链接存储的记录,虽然Java中有些底层通过链接存储原理实现的集合
也可以通过下标获取指定的记录,但是其每次都必须从链表头开始查找记录,这样会影响查找的效率


http://zhidao.baidu.com/question/150123892.html

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

回复 使用道具 举报
祁焱 黑马帝 2011-12-31 12:30:18
藤椅
for循环一般用于遍历数组。
iterator用于遍历Collection集合,同时Collection集合也可以用增强的for循环进行遍历,
在遍历Collection时,增强for循环底层也是用的迭代器iterator的方法。

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

回复 使用道具 举报
iterator用于遍历Collection集合,同时Collection集合也可以用增强的for循环进行遍历,
回复 使用道具 举报
for用于循环  底层以数组为数据结构的数据  例如ArrayList,数组
而iterator 用于循环 底层以链表为数据结构的数据 例如 HashSet, LinkedList
回复 使用道具 举报
效率上的差别
采用ArrayList对随机访问比较快,而for循环中的get()方法,采用的即是随机访问的方法,因此在ArrayList里,for循环较快
采用LinkedList则是顺序访问比较快,iterator中的next()方法,采用的即是顺序访问的方法,因此在LinkedList里,使用iterator较快



使用 Iterator 的好处在于可以使用相同方式去遍历集合(List 是有序集合)中元素,而不用考虑集合类的内部实现(只要它实现了 java.lang.Iterable 接口),如果使用 Iterator 来遍历集合中元素,一旦不再使用 List 转而使用 TreeSet 来组织数据,那遍历元素的代码不用做任何修改,如果使用 for 来遍历,那所有遍历此集合的算法都得做相应调整。

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马