双重for循环的优化

demo如下: 

public class TestM {
    public static void main(String[] args) {
        for (int i = 0; i <15 ; i++) {
            aaa();//630
            //bbb();//600
        }


    }

    private static void aaa() {
        long s = System.currentTimeMillis();
        int a = 0, b = 1;
        for (int i = 0   ; i < 10000; i++) {
            for (int j = 0   ; j < 1000; j++) {
                for (int k = 0  ; k < 100; k++) {
                    a += b;
                    if (a == 10000 * 1000 * 100){
                        System.out.println("最后一个");
                    }
                }
            }
        }
        System.out.println(System.currentTimeMillis()-s);
    }

    private static void bbb() {
        long s = System.currentTimeMillis();
        int a = 0, b = 1;
        for (int i = 0   ; i < 100; i++) {
            for (int j = 0   ; j < 1000; j++) {
                for (int k = 0  ; k < 10000; k++) {
                    a += b;
                    if (a == 10000 * 1000 * 100){
                        System.out.println("最后一个");
                    }
                }
            }
        }
        System.out.println(System.currentTimeMillis()-s);
    }
}

 结论:外层循环小的效率更高。

为什么?

在aaa的情况下

变量/次数 初始化次数 自增次数 比较次数
i 10000 10000 10000
j 10000 * 1000 10000 * 1000 10000 * 1000
k 10000 * 1000 * 100 10000 * 1000 * 100 10000 * 1000 * 100

在bbb的情况下

变量/次数 初始化次数 自增次数 比较次数
i 100 100 100
j 100* 1000 100 * 1000 100* 1000
k 10000 * 1000 * 100 10000 * 1000 * 100 10000 * 1000 * 100

所以,多重for循环,小的放外部 

猜你喜欢

转载自blog.csdn.net/dmw412724/article/details/106241541
今日推荐