请教一下for语句的优化:  for(int i=0;i<1000;i++){
    for(int j=0;j<100;j++){
      for(int k=0;k<10;k++){
         function(i,j,k);
      }
    }
  }谢谢

解决方案 »

  1.   

    我觉得这个应当是函数调用次数过多的原因,已造成频繁的压栈出栈操作。优化的办法就是把循环放在function()函数体中,如可以改为:
    xxx function(){
    for(int i=0;i <1000;i++){ 
        for(int j=0;j <100;j++){ 
          for(int k=0;k <10;k++){ 
            // function的函数体放在这儿
          } 
        } 
      } 
    }
      

  2.   

    function(i,j,k); 
    function方法都没定义,不知道具体要做些什么
      

  3.   

    http://topic.csdn.net/u/20081007/22/94a2f676-cc57-40c9-bb9e-c5b8994e1e5d.html
    这个帖子有答案~~
      

  4.   

      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); 
          } 
        } 
      } 
    循环次数最少的应该在最外层
      

  5.   


    public class TestFor { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub Long t1=System.currentTimeMillis();
      for(int k=0;k <10;k++){ 
        for(int j=0;j <100;j++){ 
          for(int i=0;i <10000;i++){ 
            ; 
          } 
        } 
      }
    Long t2=System.currentTimeMillis();
    System.out.println(t2-t1); 
    }}别感觉阿,把10和10000换一下,在我这两次时间相差4
      

  6.   

    不是感觉的,是可以算出来的
    for循环的实质就是比较,举个极端的例子,外层循环是1,内层是10000
    首先,外层比较1次,然后进入内层,比较10001次(结束时还有1次),然后外层再1次,结束,一共是10003次比较
    如果外层是10000次,内层是1次
    首先,外层比较1次,然后进入内层,比较2次(结束时还有1次),然后循环10000次,外加1次结束,一共是30001次比较如果循环有几层的话,效率还是比较可观的。当在性能关键函数时,尤其需要考虑。
      

  7.   

    此为正解!理由:
    现在的CPU都是流水线式工作的,并具备智能预读代码的功能,因此顺序执行的代码效率是最高并没有时间损耗的。
    效率最差的是判断,因为CPU无法预知代码将转向哪个分支,如果是继续执行接下来的代码还好,但是一旦是转向若干字节后的代码就需要先清空代码缓存,然后再将新代码读入继续执行。
    其次是多次的循环,因为循环中包含判断,但循环次数多了CPU会提前将循环体代码读入代码缓存,之后的效率就高了,直到循环结束。
    因此对于嵌套循环的优化建议将次数少的循环放在外层。
      

  8.   

        同意,循环次数少的放在外面。否则内层循环会频繁跳出,影响FOR循环的效率。