如果在列表上调用,java for-each循环能保证元素按顺序呈现吗?在我的测试中,似乎确实如此,但我似乎在任何文档中都没有明确提到这一点
List<Integer> myList;// [1,2,3,4]
for (Integer i : myList) {
System.out.println(i.intValue());
}
#output
1,2,3,4发布于 2009-09-04 02:35:14
是。foreach循环将按照iterator()方法提供的顺序遍历列表。请参阅documentation for the Iterable interface。
如果查看Javadoc for List,就会发现列表是一个“有序集合”,并且iterator()方法返回一个“按正确顺序”迭代的迭代器。
发布于 2009-09-04 02:29:31
foreach循环将使用Collection中内置的迭代器,因此得到结果的顺序将取决于Collection是否保持元素的某种顺序。
因此,如果您循环遍历ArrayList,您将获得插入顺序的项(假设您没有继续对ArrayList进行排序)。如果你在一个HashSet上循环,所有的赌注都是无效的,因为HashSets不维护任何顺序。
如果需要保证集合中元素的顺序,请定义一个建立该顺序的Comparator并使用Collections.sort(Collection<T>, Comparator<? super T>)。
发布于 2009-09-04 02:31:56
是的,Java语言规范确保了
for (Iterator<Whatever> i = c.iterator(); i.hasNext(); )
whatEver(i.next());等同于
for (Whatever x : c)
whatEver(x);不允许“更改顺序”。
https://stackoverflow.com/questions/1376934
复制相似问题