2009-09-04 13 views
45

java for-eachループは、リスト上で呼び出されたときに要素が順番に表示されることを保証しますか?私のテストでは、ように見えるんが、私は、これは明示的には、注文した方法でそれをしたい場合は、forループラfor (int i = 0; i < myList.length(); i++)を使用することができます任意のドキュメントにJava for-eachループ:ソート順

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

#output 
1,2,3,4 

答えて

46

はい。 foreachループは、iterator()メソッドによって提供された順序でリストを反復処理します。 documentation for the Iterable interfaceを参照してください。

Javadoc for Listを見ると、リストは「順序付けられたコレクション」であり、iterator()メソッドは「正しい順序で」繰り返すイテレータを返すことがわかります。

3

を述べ見つけることができないようです。しかし、私が知る限り、foreachは順番にそれを行う必要があります。

+0

ええ、それは本当に醜いです、私はむしろ確信しています – Mike

15

foreachループがCollectionに組み込まれたイテレータを使用しますので、あなたが結果を得るためには、Collectionが要素への順序のいくつかの種類を維持しているか否かに依存します。

したがって、ArrayListをループしていると、(ArrayListをソートしなかったと仮定して)挿入された順序で項目が取得されます。 HashSetをループしている場合、HashSetは順序を保持しないため、すべてのベットはオフになっています。

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

10

はい、Java言語仕様は

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

はない "秩序の変化は、" 許可されていません

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

と同等であることを確認してください。