日期:2014-05-20  浏览次数:20830 次

Java for循环优化
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);
      }
    }
}
今天笔试的时候遇到这么一道题目  说有上面这么循环嵌套  ,问怎么优化 并说明原因。
------最佳解决方案--------------------
内大外小  
  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条语句  

------其他解决方案--------------------
网上一搜,有篇老紫竹的测试代码

测试结论:

1 将大的循环放到内测,小的循环放到外侧,确实能提高效率

2 变量的声明,原则上是能提高效率的(从第一个看,效果差距很大),但在循环次数少的时候,并不明显,有时反倒会影响效率。

具体的原因,还是得从编译器方面来分析了。
------其他解决方案--------------------
http://www.cnblogs.com/jfei1982/articles/891716.html

测试报告。
------其他解决方案--------------------
最少的循环放到外面,最大的放到里面即可。
------其他解决方案--------------------
同样的总循环次数

外循环次数小于内循环次数
效率比
内循环次数小于外循环次数

------其他解决方案--------------------
 for(int j = 0; i < 100; j++){
是i,还是j;
------其他解决方案--------------------
把循环次数少的放外面,多的放里面
------其他解决方案--------------------
越到外面,执行次数要越少
------其他解决方案--------------------
楼上的都说的很明白了
主要思想就是减少方法的压栈次数
------其他解决方案--------------------
引用:
楼上的都说的很明白了
主要思想就是减少方法的压栈次数

说错了 不是方法
是内部循环的压栈次数
------其他解决方案--------------------
循环次数小的 放在外面
------其他解决方案--------------------
学习!
------其他解决方案--------------------
学习了