友情求助,问个循环的问题。

xiaohaiz 2004-11-01 11:34:59
(1) while循环
Iterator it = list.iterator();
while(it.hasNext()) {
Object each = it.next();
}
(2) for循环
for(Iterator it=list.iterator(); it.hasNext(); ) {
Object each = it.next();
}

有什么区别啊?用什么更合适啊?
...全文
132 点赞 收藏 14
写回复
14 条回复
hykwolf 2004年11月01日
性能没啥太大区别
我做了Integer.MAX_VALUE次循环测试
10次测试for和while的所用时间都在17500 到 18500左右

区别可能就在你用的地方上了,就象一个纽扣的衣服和三个纽扣的衣服一样都有人买

比如楼主的2中的对象it的生存周期再for的{}内,当for循环结束后it即被废弃
而(1)中的it生命周期不再被while所限制,他在while的上一个{}内
回复 点赞
kaymo 2004年11月01日
当然是for循环更有优势,理由:
1,使变量作用域变小
2,少一行代码
回复 点赞
whirlybird 2004年11月01日
应该没有区别的
回复 点赞
lenoli 2004年11月01日
个人习惯
回复 点赞
cold_blooded 2004年11月01日
对于不需要循环变量的循环,
个人更喜欢用while.

方便吧。
回复 点赞
shangqiao 2004年11月01日
我觉得估计是个人习惯,:treeroot(根根)说得也有道理
回复 点赞
treeroot 2004年11月01日
我觉得效率上应该没什么差别,这个是编译器的问题.
没有while当然可以,其实没有for也是可以的呀.
回复 点赞
mlovex 2004年11月01日
个人觉得while 效率高

不然while 还有存在的理由吗
回复 点赞
zj_ok 2004年11月01日
效率上有没有区别?
回复 点赞
treeroot 2004年11月01日
功能一样,用for循环更加合适
因为变量更加局部化了.
回复 点赞
xiaohaiz 2004年11月01日
TO lenoli(可乐吧): 查什么?
呵呵,做个例子说明下for循环优于while循环而已。
这样可以散出技术分啊。
回复 点赞
lenoli 2004年11月01日
呵呵,这个你都查啊
回复 点赞
xiaohaiz 2004年11月01日
好了,应该结帖了。。。本来预计在8人的时候结帖比较合适的。。。大家平分这些分比较合适。。

首先,可以肯定在性能上不会有任何的差异,这是因为编译的时候其实会优化为一样的代码:
比如:
Iterator it=new ArrayList().iterator();
while(it.hasNext()) {
it.next();
}

for(Iterator it=new ArrayList().iterator();it.hasNext();) {
it.next();
}
这两段代码在编译后的字节码是一样的:
<<
Code:
0: new #2; //class java/util/ArrayList
3: dup
4: invokespecial #3; //Method java/util/ArrayList."<init>":()V
7: invokevirtual #4; //Method java/util/ArrayList.iterator:()Ljava/util/Iterator;
10: astore_1
11: aload_1
12: invokeinterface #5, 1; //InterfaceMethod java/util/Iterator.hasNext:()Z
17: ifeq 30
20: aload_1
21: invokeinterface #6, 1; //InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
26: pop
27: goto 11
30: return
>>
7: 为it赋初始值
12: it.hasNext()
17: 做循环条件的比较
21: 循环体的内容
27: 回到循环。

从以上俺们可以看到实际编译的时候做了同样的优化,都是按照for的循环形式来执行的。

剩下的就是局部变量作用域来判断使用何种循环比较优先了。。treeroot(根根) shangqiao(伤桥) kaymo(头发熟了) hykwolf(Yankang Hu) 好像都说到了。。当然,少一行代码应该不是什么理由了。。^^
皆大欢喜,人人有分。
回复 点赞
fengfengjunjun 2004年11月01日
按楼上的这么说,for比while差,那for还放着干什么啊
存在肯定是有道理的,偶不是很清楚
^_^
回复 点赞
发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告