黑马程序员技术交流社区

标题: 增强for循环和传统for循环有什么区别 [打印本页]

作者: 陈波    时间: 2012-5-3 23:05
标题: 增强for循环和传统for循环有什么区别
增强for循环和传统for循环有什么区别
作者: 樊永杰    时间: 2012-5-3 23:10
增强for循环:是一种简化形式,它必须有遍历的目标,该目标要么是数组要么是collection中的单列集合。仅仅是为了获取数组中的元素可以使用高级for.

传统for循环:可以完成对循环执行多次,因为可以控制循环的增量和条件。对数组角标进行操作建议使用传统for.

另外:foreach不可以直接遍历map,因为map中存储的是键值对,但可以将map转成单列set,就可以用了。                  
作者: 姚鑫    时间: 2012-5-3 23:18
增强for循环不需要条件,自动遍历给定的集合体的所有值,传统for循环需要三个条件。
增强for循环不能为循环中的变量赋值
增强for循环需要java5支持
作者: 张成龙    时间: 2012-5-4 08:55
增强for循环是传统for的简化形式,增强for实现的功能传统for都可以实现,只是书写上有些繁琐。
凡是简化的都有其局限性,例如要取出数组的一部分元素时,用传统for更合适
作者: 郭永岳    时间: 2012-5-4 21:55
本帖最后由 郭永岳 于 2012-5-4 21:58 编辑

1.增强for循环和iterator遍历的效果是一样的,也就说
增强for循环的内部也就是调用iteratoer实现的(可以查看编译后的文件),但是增强for循环 有些缺点,例如不能在增强循环里动态的删除集合内容。不能获取下标等。
2.ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。
3.而对于 LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用 增强for循环,也就是iterator。
下面的例子可以证明
public static void main(String[] args)
{
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 5000000; i++)
{
list.add(11);
}


long start = System.currentTimeMillis();
int size = list.size();
int c1 = 1;
for (int i = 0; i < size; i++)
{
c1 = list.get(i);
}
System.out.println("for + get(i)方法: " + (System.currentTimeMillis() - start));


long start2 = System.currentTimeMillis();
for (int c2 : list)
{
}
System.out.println("Iterator(foreach)方法:" + (System.currentTimeMillis() - start2));
}
结果:
for + get(i)方法: 94
Iterator(foreach)方法:234
在把ArrayList改为LinkedList,我这里内存溢出了,于是list改成50000
结果:
for + get(i)方法: 6969
Iterator(foreach)方法:0


看到你问题,自己也不懂,就在网上找了找,感觉这个挺好的,受教了。


作者: 李啸    时间: 2012-5-9 13:24
增强for循环也叫foreach 它的执行效率要比for循环高
首先foreach的底层是通过迭代器来实现的不需要去判断数组或者集合的长度或者大小了一步一步去取值 和赋值 直到到达数组或者集合的最大长度才停止
而for循环每一次执行循环体后都需要去判断满不满足for循环中的表达式




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2