2012-10-22 96 views
1

循環是有兩種類型的在Java

int[] numbers = {1,2,3,4,5,6,7,8,9,10}; 
for (int item : numbers) { 
    System.out.println("Count is: " + item); 
} 

int[] numbers = {1,2,3,4,5,6,7,8,9,10}; 
for (int i = 0; i < 10; i++) { 
    System.out.println("Count is: " + numbers[i]); 
} 
+0

http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html – kosa

+0

@John check out http://stackoverflow.com/questions/2113216/which-is-more -efficient for a each-loop-or-an-iterator :) – WilliamShatner

回答

5

它們對於數組是相同的。如果你有一個數字的訂單列表中,您應該使用

for(int i = min; i <= max; max += stride) 

for(int i = min; i < max+stride; max += stride) 

例如

for(int i = 1; i < 11; i++) 

for(int i = 1; i <= 10; i++) 

,或者如果由10

for(int j = 0; j <= 100; j += 10) 

遞增如果值的預定義的列表來使用,則可以使用陣列。

我經常寫他們喜歡這個

for (int item : new int[] {1, 2, 5, 10, 20, 50, 100}) 
    System.out.println("Count is: " + item); 
+3

-1。對不起,國際海事組織,他的風格只能用於價值觀不正確的時候。對於i = 1..10樣式循環來說,它們已經成爲標準和成功的語言成語,比我們許多人還活着。在你的風格中,支持程序員必須閱讀所有10個整數,以檢查這些內容是否有序。 – user949300

+0

@ user949300好點,如果你有一個序列,使用數組不是一個好主意。 –

+0

我喜歡你的新例子,其中的數組不是一個序列,而是一個「模糊對數」系列數字。所以我會撤消-1。 – user949300

3

之間竟在效率方面的差別,爲您的代碼片段生成的字節碼將幾乎完全相同。你可以用javap等工具檢查它,甚至可以在Eclipse的反編譯類查看器中查看它。

+1

僅適用於數組。對於「收藏」,它們完全不同。 –

+1

@SteveKuo OP的問題有兩個代碼。生成的字節碼將幾乎完全相同。你的評論沒什麼意義。 –

+0

讓我更清楚。對於Collection來說,索引vs迭代器可能會有很大的不同,這取決於集合實現(如LinkedList)。 –

0

這將是在性能上非常相似,所以是由你選擇自己喜歡的。對於我來說,每一個總是比較優雅,但每個程序員都是不同的^^

3

對於Array [],它與Collections類似,但如ArrayList,它會有所不同。

1

除非您在循環內部做了一件非常奇怪的事情,否則性能上的差異將無法察覺。無論這個問題的答案如何,這是一個「明智的,笨蛋的」優化。應該決定你需要哪些功能以及哪些代碼更清晰。 (國際海事組織,選項1更簡單,更清晰,但有時你需要選項2)

你可能花了更多的時間輸入問題和閱讀答案,而不是在循環中花費的時間在程序的生命中。 :-)

不確定在哪裏問這個,但我認爲應該有一些「過早優化」標籤,我們可以添加到這樣的問題。