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++) {
}