天天看點

哪一種java循環方式性能最高

public class LoopTest {  
    private static List<Integer> list = new ArrayList<Integer>();  

    static {  
        for (int i = ; i < ; i++) {  
            list.add(i);  
        }  
    }  

    public void test(){  
        long startTime;  
        long endTime;  

        //style1
        startTime = System.nanoTime();  
        for (int i : list) { 
        }  
        endTime = System.nanoTime();  
        System.out.println("style1 —— for(int i : list) —— " + (endTime - startTime) + "毫微秒");  

        //style2  
        startTime = System.nanoTime();  
        for (int i = ; i < list.size(); i++) {  
        }  
        endTime = System.nanoTime();  
        System.out.println("style2 —— for(int i = 0; i < list.size(); i++) —— " + (endTime - startTime) + "毫微秒");  

        //style3  
        startTime = System.nanoTime();  
        int size = list.size();
        for (int i = ; i < size; i++) {  
        }  
        endTime = System.nanoTime();  
        System.out.println("style3 —— for(int i = 0; i < size; i++) —— " + (endTime - startTime) + "毫微秒");

        //style4
        startTime = System.nanoTime();
        for (int i = list.size() - ; i > -; i--) {
        }
        endTime = System.nanoTime();
        System.out.println("Style4 —— for(int i = list.size() - 1; i > -1; i--) —— " + (endTime - startTime) + "毫微秒");

    }  

    public static void main(String[] args) {  
        new LoopTest().test();  
    }  
} 
           

輸出結果:

style1 —— for(int i : list) —— 39563185毫微秒

style2 —— for(int i = 0; i < list.size(); i++) —— 5012893毫微秒

style3 —— for(int i = 0; i < size; i++) —— 3683956毫微秒

Style4 —— for(int i = list.size() - 1; i > -1; i–)—— 3199474毫微秒

結論:

style1性能最低,原因增強的for循環内部使用了疊代iterator 形式,建立interator和調用interator.get() 都需要時間。

style2是程式員最常用的循環方式,性能一般,原因在于list.size()做為循環判斷的标準,每次循環都要比較一次(沒有意義)。

style3和style4性能差不多,機關是”毫微秒”,1秒=1000豪秒;1毫秒=1000微秒;1微秒=1000毫微秒。

style4性能最高,實踐說明一切! 可有一個問題,經過多次測試發現style4不穩定,消耗時間偶爾會超過style3。

推薦:

style3和style4性能相差不多,style4不穩定,而且用style4有些時候會導緻代碼的可讀性差。so,我推薦style3,JDK源碼裡也采用了style3。

int size = list.size();
for (int i = ; i < size; i++) {  
}
           

繼續閱讀