for(int i = 0 ; i < 1000 ;i++){
   for(int j = 0; i < 100; j++){
      for(int k = 0;k < 10; k++ ){
fun(i,j,k);
      }
    }
}
今天笔试的时候遇到这么一道题目  说有上面这么循环嵌套  ,问怎么优化 并说明原因。

解决方案 »

  1.   

     for(int j = 0; < 100; j++){
    是i,还是j;
      

  2.   

    内大外小  
      for( int k=0;k <10;k++){  
      for(int j=0;j <100;j++){  
      for(int i=0;i <1000;i++){  
      function(i,j,k);  
      }  
      }  
      }   
      k <10;k++; 执行10次  
      j <100;j++ 执行10*100次  
      i <1000;i++ 执行10*100*1000次  
      function(i,j,k); 执行10*100*1000次  
      共执行语句数=(10+10*100+10*100*1000)*2+10*100*1000=3002020  
      内小外大  
      for( int k=0;k <1000;k++){  
      for(int j=0;j <100;j++){  
      for(int i=0;i <10;i++){  
      function(i,j,k);  
      }  
      }  
      }   
      k <1000;k++; 执行1000次  
      j <100;j++ 执行1000*100次  
      i <10;i++ 执行10*100*1000次  
      function(i,j,k); 执行10*100*1000次  
      共执行语句数=(1000+1000*100+10*100*1000)*2+10*100*1000=3202000  所以执行效率应该是内大外小更高一写  
      内小外大-内大外小=3202000条语句-3002020条语句=199980条语句  
      

  3.   

    http://www.cnblogs.com/jfei1982/articles/891716.html测试报告。
      

  4.   

    大家说的都挺好的,我也是刚遇到这么个题。我知道是怎么回事儿了 ,但是具体的原因是什么我还是没明白,能不能从编译器的角度说一下。  对了我昨天的一题说jvm加载.class文件的过程
      

  5.   

    http://developer.51cto.com/art/201207/348578.htm  参考这个帖子 循环次数最少的放到外面,循环次数最多的放里面,这样可以最大程度的(注:3个不同次数的循环变量共有6种排列组合情况,此种组合为最优)减少相关循环变量的实例化次数、初始化次数、比较次数、自增次数
    将循环变量的实例化放到循环外,这样可以进一步减少相关循环变量的实例化次数