web-dev-qa-db-ja.com

Java For-Each Loop:ソート順

Java for-eachループは、リストで呼び出された場合、要素が順番に表示されることを保証しますか?すべてのドキュメントで

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

#output
1,2,3,4
47
Mike

はい。 foreachループは、iterator()メソッドで指定された順序でリストを反復処理します。 Iterableインターフェイスのドキュメント を参照してください。

ListのJavadoc を見ると、リストが「順序付きコレクション」であり、iterator()メソッドが「適切な順序で」反復する反復子を返すことがわかります。

48
hallidave

foreachループはCollectionに組み込まれたイテレーターを使用するため、結果を取得する順序は、Collectionが要素に対して何らかの順序を維持するかどうかによって異なります。

したがって、ArrayListをループしている場合は、アイテムが挿入された順序で取得されます(ArrayListをソートしなかった場合)。 HashSetをループしている場合、HashSetは順序を維持しないため、すべてのベットはオフになります。

コレクション内の要素の順序を保証する必要がある場合は、その順序を確立するComparatorを定義し、Collections.sort(Collection<T>, Comparator<? super T>)を使用します。

15
rjohnston

はい、Java言語仕様により、

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

と同等です

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

「順序の変更」は許可されていません。

10
Alex Martelli

Forループ、la for (int i = 0; i < myList.length(); i++)を順序どおりに使用したい場合に使用できます。ただし、私が知る限り、foreachは順番に実行する必要があります。

3
user153498