黑马程序员技术交流社区
标题:
增强for循环的问题,急!
[打印本页]
作者:
Candy
时间:
2013-7-18 14:37
标题:
增强for循环的问题,急!
学习视频的时候,遇到了增强的for循环,增强的for循环毫无疑问可以遍历数组,那么对于集合的遍历呢,对对象的集合(Collection)和键值对集合(Map)都支持吗?增强的for循环对集合的增删改查操作有限制吗? 还有那么传统的for循环与增强的for循环有什么大的区别吗? 呵呵 ,不好意思,还请前辈们解惑啊,发现东西越学越多了
作者:
禾呈
时间:
2013-7-18 14:51
foreach循环只能对内部封装迭代器的集合或数组进行遍历。所以foreach不支持Map集合。foreach对集合进行遍历,不允许并发的对集合进行增删操作。使用foreach循环必须要有遍历对象,而for循环不需要。
作者:
蚂蚁搬家
时间:
2013-7-18 15:14
本帖最后由 蚂蚁搬家 于 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方法取出键和值;
作者:
王瀛
时间:
2013-7-18 15:28
enhanced For :
只能遍历数组或者实现了Iterable接口的集合类
或者直接记:
只能遍历数组或者Collection集合
Map是不支持的
如果想要遍历Map中的元素,可以是用keySet()方法取得Key的Set集合,或者entrySet()方法取得K-V关系
然后转换成遍历Set集合就可以了
作者:
付龙
时间:
2013-7-18 21:16
增强for循环有局限性,必须有被遍历的目标,遍历数组和集合时可以使用增强for循环
①:首先增强for循环和iterator遍历的效果是一样的,也就说增强for循环的内部也就是调用iteratoer实现的,但是增强for循环有些缺点,例如不能在增强循环里动态的删除集合内容。不能获取下标等。
②:ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。
③:而对于LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用增强for循环,也就是iterator。
作者:
王海旺
时间:
2013-7-18 21:42
当遍历集合或数组时,不要使用增强的for循环,因为它丢失了下标信息。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2