雙重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循環,小的放外部 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章