java for-each循环是否保证如果在列表上调用元素将按顺序显示?在我的测试中似乎确实如此,但我似乎无法在任何文档中明确提到这一点
List<Integer> myList;// [1,2,3,4]
for (Integer i : myList) {
System.out.println(i.intValue());
}
#output
1,2,3,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应该按顺序进行。