Java For-Each循环:排序顺序

时间:2009-09-04 02:24:12

标签: 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

4 个答案:

答案 0 :(得分:47)

是。 foreach循环将按照iterator()方法提供的顺序遍历列表。请参阅documentation for the Iterable interface

如果查看Javadoc for List,您可以看到列表是“有序集合”,并且iterator()方法返回迭代器“按正确顺序”迭代。

答案 1 :(得分:15)

foreach循环将使用Collection中内置的迭代器,因此得到的顺序将取决于Collection是否对元素保持某种顺序。

因此,如果您循环遍历ArrayList,您将按照插入顺序获取项目(假设您没有继续对ArrayList进行排序)。如果您正在循环HashSet,则所有投注均已关闭,因为HashSets不会保留任何排序。

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

答案 2 :(得分:10)

是的,Java语言规范确保

for (Iterator<Whatever> i = c.iterator(); i.hasNext(); )
    whatEver(i.next());

相当于

for (Whatever x : c)
    whatEver(x);

不允许“订购更改”。

答案 3 :(得分:3)

如果你想以有序的方式进行,你可以使用for循环,la for (int i = 0; i < myList.length(); i++)。虽然,据我所知,foreach应该按顺序进行。