Java For-Each循环:排序顺序

Mik*_*ike 47 java syntax loops

java for-each循环是否保证如果在列表上调用元素将按顺序显示?在我的测试中似乎确实如此,但我似乎无法在任何文档中明确提到这一点

List<Integer> myList;// [1,2,3,4]
for (Integer i : myList) {
  System.out.println(i.intValue());
}

#output
1,2,3,4
Run Code Online (Sandbox Code Playgroud)

hal*_*ave 48

是.foreach循环将按照iterator()方法提供的顺序遍历列表.请参阅Iterable接口文档.

如果查看Javadoc for List,您可以看到列表是一个"有序集合",并且该iterator()方法返回一个迭代器,它以"正确的顺序"迭代.


rjo*_*ton 15

foreach循环将使用内置的迭代器Collection,让你在得到结果的顺序将取决于是否Collection保持某种的元素顺序.

因此,如果你循环遍历ArrayList,你将按照它们插入的顺序获取项目(假设你没有继续对ArrayList进行排序).如果你在a上循环HashSet,所有的赌注都会关闭,因为HashSets不会保持任何排序.

如果您需要保证对集合中元素的订单,请定义Comparator建立该订单并使用的订单Collections.sort(Collection<T>, Comparator<? super T>).


Ale*_*lli 10

是的,Java语言规范确保了这一点

for (Iterator<Whatever> i = c.iterator(); i.hasNext(); )
    whatEver(i.next());
Run Code Online (Sandbox Code Playgroud)

相当于

for (Whatever x : c)
    whatEver(x);
Run Code Online (Sandbox Code Playgroud)

不允许"订购变更".