社区
Java SE
帖子详情
友情求助,问个循环的问题。
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();
}
有什么区别啊?用什么更合适啊?
...全文
183
14
打赏
收藏
友情求助,问个循环的问题。
(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(); } 有什么区别啊?用什么更合适啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
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还放着干什么啊
存在肯定是有道理的,偶不是很清楚
^_^
区块链之Go语言设计模式
不要问我“早上碰到MM新做了个发型怎么说”这种
问题
,自己用BRIDGE组合一下不就行了。 8. COMPOSITE 合成模式 合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系...
大模型语言模型的全面测评:ChatGPT、讯飞星火认知大模型、文心一言、昆仑天工和通义千问
大模型语言模型是人工智能技术的重要应用之一,它们能够快速生成高质量的文章、智能回答
问题
等。本文对五个常用的大模型语言模型进行了测评和比较,包括ChatGPT、讯飞星火认知大模型、文心一言、昆仑天工和通义千问。测评结果显示,这些大模型具有强大的生成能力和准确性,可以为用户提供更智能化的服务。此外,大模型语言模型还有望在未来改变人机交互方式和服务体验。
c语言敲出一到1000的代码,[
求助
]求个1000!的代码
下面是1!+2!+3!+4!+4!+!+6!……+N!的源代码里面有很大数的阶乘的算法煮要是按位算,那么大的数,肯定不能几个字节来存放希望有用#include /*注释,对算法可能还表达还不是很完全*/#define N 2500 /*为了方便,把两个空间设为一样大,可以调整,以提高速度。不一定*/long int a[N]={0}; ...
装机 | 重装双系统里的 ubuntu
Ubuntu 妈耶,我就是爱美,我搞了漂亮的桌面之后ubuntu扑街了,陷入
循环
登录,驱动也没用。
求助
无门之后开始重装了。 呜呜呜,我的ubuntu不是整个实验室里最美的了! 话说重装后还可以顺便把之前做的不好的地方改一下,亲测无雷,我搞了三天,呕心沥血,明天就开始科研! 重装双系统当中的ubuntu
循环
登录
问题
安装驱动 安装miniconda并分配给所有用户 安装远程连接(向日葵、win10远程桌面) ????重装ub
一个printf(结构体指针)引发的血案
这是道哥的第015篇原创 关注+星标公众号,不错过最新文章 文章目录一、前言1. 为什么写这篇文章2. 你能得到什么收获3. 我的测试环境3.1 操作系统3.2 编译器二、
问题
导入1. 网友
求助
代码2. 期望结果3. 实际打印结果三、分析
问题
的思路1. 打印内存模型2. 分开打印信息3. 一步步分析
问题
本质原因3.1 打印一个最简单的字符串3.2 打印一个结构体变量3.3 测试更简单的结构体变量3.4 继续打印结构体变量四、C语言中的可变参数1. 利用可变参数的三个函数示例示例1:参数类型是 i.
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章