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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Candy 高级黑马   /  2013-7-18 14:37  /  1573 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

学习视频的时候,遇到了增强的for循环,增强的for循环毫无疑问可以遍历数组,那么对于集合的遍历呢,对对象的集合(Collection)和键值对集合(Map)都支持吗?增强的for循环对集合的增删改查操作有限制吗? 还有那么传统的for循环与增强的for循环有什么大的区别吗?  呵呵 ,不好意思,还请前辈们解惑啊,发现东西越学越多了

评分

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

查看全部评分

5 个回复

倒序浏览
foreach循环只能对内部封装迭代器的集合或数组进行遍历。所以foreach不支持Map集合。foreach对集合进行遍历,不允许并发的对集合进行增删操作。使用foreach循环必须要有遍历对象,而for循环不需要。

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 蚂蚁搬家 于 2013-7-18 16:04 编辑

增强的for循环(也叫for-each):for(需遍历的变量:数组或集合){执行语句}:主要用于集合(Collection接口下的集合),底层通过调用iterator实现集合的遍历;这种遍历方式只能获取集合中的元素,不能对集合进行操作,迭代器可以对元素进行remove,ListIterator更是可以对元素进行增删改查;

用增强for循环遍历ArrayList集合:
for(String str : al)
{
   System.out.println(str);
}
用迭代器遍历ArrayList集合:
for(Iterator it = al.iterator(); it.hasNext();)
{
    System.out.println(it.next());
}
增强for循环的局限性:必须指定遍历的对象,在遍历数组时还是推荐使用传统的for循环,传统方式可以指定下标;

Map不支持迭代器,自然不支持for循环遍历;
Map集合取出元素的方式一:keySet方法:Map集合中没有迭代器,可以把集合里所有的键取出存入Set集合(keySet方法),用Set集合的迭代器将键一一取出,并用Map集合的get方法取出键对应的值;
Map集合取出元素的方式二:entrySet方法:返回集合中映射关系的Set集合,返回的Set集合中的元素是Map.Entry类型的,然后通过Set的迭代器取出Map.Entry,用该接口中的getKey方法和getValue方法取出键和值;

评分

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

查看全部评分

回复 使用道具 举报
enhanced For :
只能遍历数组或者实现了Iterable接口的集合类

或者直接记:
只能遍历数组或者Collection集合

Map是不支持的
如果想要遍历Map中的元素,可以是用keySet()方法取得Key的Set集合,或者entrySet()方法取得K-V关系

然后转换成遍历Set集合就可以了

评分

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

查看全部评分

回复 使用道具 举报
增强for循环有局限性,必须有被遍历的目标,遍历数组和集合时可以使用增强for循环
①:首先增强for循环和iterator遍历的效果是一样的,也就说增强for循环的内部也就是调用iteratoer实现的,但是增强for循环有些缺点,例如不能在增强循环里动态的删除集合内容。不能获取下标等。
②:ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。
③:而对于LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用增强for循环,也就是iterator。
回复 使用道具 举报
当遍历集合或数组时,不要使用增强的for循环,因为它丢失了下标信息。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马