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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙天 黑马帝   /  2012-4-28 11:45  /  2202 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

用增强for循环可以遍历map集合吗?
以下是我的总结:
传统for循环可以通过增量完成循环的动作,让指定代码运行多次。
增强for循环,遍历必须有目标,而且目标只能是数组和Collection单列集合
通常增强for循环只用于遍历目标。在遍历过程中少有对元素的操作。
而迭代器在遍历元素的建议遍历数组可以是增强for循环,也可以传统for循环。
只为遍历可以增强for循环简化书写,一旦要对元素有其他操作时,要使用传统for循环。过程中,可以对遍历的元素进行操作比如remove

2 个回复

倒序浏览
本帖最后由 王明(1988) 于 2012-4-28 13:10 编辑

这个问题我已经回答过别人,你看一下之前的帖子,比这个详细点或看我博客。地址:
http://bostonivy4me.blog.163.com/blog/#m=0

for循环分为两种:.
第一种为普通的for循环    这种for循环通常需要三个步骤即 for(初始表达式;条件表达式;递增表达式)有时候递增表达式也可以省去,一般是在使用Iterator迭代时(Iterator的hasNext方法判断时,可以省去递增表达式)。这种for循环很常用。
第二种为增强的for循环(也就是foreach循环)    这种for循环的内部是调用了Iterator实现的(实现了Iterator接口),和Iterator遍历效果是一样(你可以断点调试跟踪代码看看内部原理),主要用于遍历数组、集合的每一个元素。优点是写法简便,无需获得数组、集合长度,也无需根据索引来访问元素。缺点是不能在循环里动态的删除元素和获取元素下标,还有一点,在多线程下使用增强for来改变元素会出错误,因为通过迭代器实现的增强for对该数组或集合会现有一个拷贝,改变元素是会导致不能正常遍历数组和集合。所以说多线程下增强for是不安全不推荐用。
拿数组ArrayList和链表LinkedList来区分记忆:
1.ArrayList由于使用数组实现,因此下标明确,最好使用普通for循环。
2.而对于 LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用增强for循环,也就是iterator。
回复 使用道具 举报
1用增强的for循环可以遍历集合  但是当遍历集合或数组时,如果需要访问集合或数组的下标,那么最好使用旧式的方式来实现循环或遍历,而不要使用增强的for 循环,因为增强的for循环会丢失了下标信息。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马