两次循环,每次循环做一件事快,还是一次循环做两件事快比如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();
}哪个更有效率呢

解决方案 »

  1.   

     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));
    }
    }可以试试
      

  2.   

    效率基本上都是一样的,可以自己计时看看,在循环次数很大的时候,耗时基本上是一样的。看当时cpu运行的情况。一次执行,1比2快,下次执行就可能是2比1快。但是代码设计风格上来说,1比2要好。
    理论上来说,其实是1比2效率高的,因为for循环的比较和变量自增,2明显比1要多做工作。
      

  3.   

    对于楼上各位的看法实在不敢苟同很明显第二个算法要比第一个算法多算了几次计数,多算了几次比较,看上去第一个会快一些但是cpu做计算时需要把数据加载到寄存器里,然后才能对寄存器里的数据操作,第一个运行时cpu会将doFirst和doSecond的代码在寄存器里不停的调换(如果寄存器完全可以把这两段代码同时放进去的话,算我没说),考虑到寄存器的缓存算法,损失的时间就不是几次计数器的时间了,如果程序非常大不,doFirst和doSecond不能同时放到内存中,需要用到虚拟内存的话,那第一个程序的效率就无节操了。第二个程序则不存在上述问题,但是如果doSecond不依赖于doFirst的话,还是建议楼主用第一个程序,因为第一个程序风格更好。