for(int i=0;i<10;i++){
    for(int j=0;j<1000;j++){
         //执行代码
    }
}for(int i=0;i<1000;i++){
    for(int j=0;j<10;j++){
         //执行代码
    }
}这两个哪个效率高?为什么

解决方案 »

  1.   


    public class Test { public static void main(String[] args){
    Test tt = new Test();
    long st = System.currentTimeMillis();
    tt.ttLoop3();
    long end = System.currentTimeMillis();
    System.out.println(end - st);
    }
    void ttLoop(){
    for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 1000; j++) {
    fun(i+j);
    }
    }
    }

    void ttLoop2(){
    for (int i = 0; i < 1000; i++) {
    for (int j = 0; j < 10; j++) {
    fun(i+j);
    }
    }
    }

    void ttLoop3(){
    for (int i = 0; i < 100; i++) {
    for (int j = 0; j < 100; j++) {
    fun(i+j);
    }
    }
    }

    void fun(long k){
    for (int i = 0; i < k; i++) {
    long t = k+i;
    }
    }
    我做了个测试, 时间的长短,平均啊,  ttLoop2>ttLoop >ttLoop3,其中前面两个不是绝对的,但最后面一个是比较小,不知道有没有弄错,你们看看.
    至于原因,我说不上来.是不是像四边形中,正方形和矩形有点相关,嗐猜啊
      

  2.   

    楼上的程序有问题;fun函数这么写的话运行的次数是不一样的.按照理论俩来讲.外层循环越少越好.这样的话,循环切换的次数比较少.运行的效率也就搞了.上面的3最小是因为fun里循环最少.
      

  3.   

    好像在做数组操作时,有行存储和列存储之分。
    行循环会减少数据Cache交换内存的次数。  
    列循环会减少内层循环初始化、终止次数