2012-10-22 57 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)

你可能花了更多的时间输入问题和阅读答案,而不是在循环中花费的时间在程序的生命中。 :-)

不确定在哪里问这个,但我认为应该有一些“过早优化”标签,我们可以添加到这样的问题。