2014-02-15 124 views
-1

我在Java中這三個類別:這些循環哪個更高效?

ArrayList<Integer> list1 = new ArrayList<Integer>(6000); 
ArrayList<Integer> list2 = new ArrayList<Integer>(6000); 
ArrayList<Integer> list3 = new ArrayList<Integer>(6000); 

哪個更有效地通過循環,並設置爲0?

for(int i =0; i < rHist.size(); i++) { 
    list1.set[i] = 0; 
    list2.set[i] = 0; 
    list3.set[i] = 0; 
} 

還是這個?

for (int n : list1) { 
    n = 0; 
} 


for (int n : list2) { 
    n = 0; 
} 


for (int n : list3) { 
    n = 0; 
} 

感謝

+3

變體1)是否不編譯;變體2)不將List的內容設置爲零。 – qqilihq

+3

不要考慮微觀優化。他們不重要。首先編寫代碼,然後修改。 –

+0

哎呀,對不起我的錯誤 – user2891805

回答

1

正如評論已經提到的,兩者的變體沒有達到你所說的目標。這就是說,最好看看編寫可讀,可理解和簡短的代碼,並避免在Collections API中給出的方法。類似的東西用零填充的6000份列表:

List<Integer> list = Collections.nCopies(6000, 0); 

如果您需要事後發生變異的名單,你需要用它的可修改列表,像這樣:

List<Integer> list = new ArrayList<Integer>(Collections.nCopies(6000, 0)); 
0

第一個是更好的,因爲你是循環一次,而不是三個,如果你把尺寸6000的循環,並設定應該是這樣的list1.set(i,0)而不是list1[i]=0

如果你反編譯二者uisng javap -c "appname"讓我們假設他們是在主,你可以看到你自己發生了什麼