两次循环,每次循环做一件事快,还是一次循环做两件事快

joniy 2012-06-14 04:13:21
两次循环,每次循环做一件事快,还是一次循环做两件事快

比如

for(int i =0; i<10;i++){
doFirst();
doSecond();
}


for(int i =0; i<10;i++){
doFirst();
}
for(int i =0; i<10;i++){
doSecond();
}

哪个更有效率呢
...全文
1051 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shangzhihaohao 2012-06-14
  • 打赏
  • 举报
回复
对于楼上各位的看法实在不敢苟同

很明显第二个算法要比第一个算法多算了几次计数,多算了几次比较,看上去第一个会快一些

但是cpu做计算时需要把数据加载到寄存器里,然后才能对寄存器里的数据操作,第一个运行时cpu会将doFirst和doSecond的代码在寄存器里不停的调换(如果寄存器完全可以把这两段代码同时放进去的话,算我没说),考虑到寄存器的缓存算法,损失的时间就不是几次计数器的时间了,如果程序非常大不,doFirst和doSecond不能同时放到内存中,需要用到虚拟内存的话,那第一个程序的效率就无节操了。

第二个程序则不存在上述问题,但是如果doSecond不依赖于doFirst的话,还是建议楼主用第一个程序,因为第一个程序风格更好。

sailland 2012-06-14
  • 打赏
  • 举报
回复
第一种不仅效率更高,而且从风格上说,减少了多余的重复代码,推荐第一种循环
newbie_Lee 2012-06-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

效率基本上都是一样的,可以自己计时看看,在循环次数很大的时候,耗时基本上是一样的。看当时cpu运行的情况。一次执行,1比2快,下次执行就可能是2比1快。

但是代码设计风格上来说,1比2要好。
理论上来说,其实是1比2效率高的,因为for循环的比较和变量自增,2明显比1要多做工作。
[/Quote]

+ 1
我爱淼儿 2012-06-14
  • 打赏
  • 举报
回复
效率基本上都是一样的,可以自己计时看看,在循环次数很大的时候,耗时基本上是一样的。看当时cpu运行的情况。一次执行,1比2快,下次执行就可能是2比1快。

但是代码设计风格上来说,1比2要好。
理论上来说,其实是1比2效率高的,因为for循环的比较和变量自增,2明显比1要多做工作。
huage 2012-06-14
  • 打赏
  • 举报
回复
 public static void s(){
for (int i = 0; i < 100; i++) {
System.out.print("s");
}
}
public static void ss(){
for (int i = 0; i < 100; i++) {
System.out.print("ss");
}
}
public static void main(String[] args) {


long l = System.currentTimeMillis() ;
for (int j = 0; j < 1000; j++) {
s() ;
ss() ;
}
long l2 =System.currentTimeMillis() ;

for (int i = 0; i < 1000; i++) {
s();
}
for (int i = 0; i < 1000; i++) {
ss();
}
long l3 =System.currentTimeMillis() ;
System.out.println();
System.out.println( (l2-l) +" "+(l3-l2));
}
}
可以试试
huage 2012-06-14
  • 打赏
  • 举报
回复
一般会用第一种,应该第一种高吧 , 可以循环多点来试试
tengfeng05 2012-06-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
两次循环,每次循环做一件事快,还是一次循环做两件事快

比如

for(int i =0; i<10;i++){
doFirst();
doSecond();
}


for(int i =0; i<10;i++){
doFirst();
}
for(int i =0; i<10;i++){
doSecond();
}

哪个更有效率呢
[/Quote]
第一个快些。但是可以忽略不计,因为循环本身的速度是非常快的
  • 打赏
  • 举报
回复
你这个单线程程序都是从上到小的执行,美观点就例子1比较好。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧