首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

Java for循环优化解决方案

2012-12-18 
Java for循环优化for(int i 0 i 1000 i++){for(int j 0 i 100 j++){for(int k 0k 10 k

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;
[其他解释]
把循环次数少的放外面,多的放里面
[其他解释]
越到外面,执行次数要越少
[其他解释]
楼上的都说的很明白了
主要思想就是减少方法的压栈次数
[其他解释]

引用:
楼上的都说的很明白了
主要思想就是减少方法的压栈次数

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

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

[其他解释]
这个问题我现在都没弄的很明白    不过谢谢大家     以后参加工作了  有时间一定好好研究一下   
[其他解释]
http://developer.51cto.com/art/201207/348578.htm  参考这个帖子 

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

热点排行