2009-09-04 19 views
45

Czy java dla każdej pętli gwarantuje, że elementy zostaną przedstawione w kolejności, jeśli zostaną wywołane na liście? W moich testach to wydaje się, ale nie wydaje się znaleźć to wyraźnie wymieniony w każdej dokumentacjiJava For-Each Loop: Kolejność sortowania

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

#output 
1,2,3,4 

Odpowiedz

3

Można użyć pętli for, a la for (int i = 0; i < myList.length(); i++) jeśli chcesz to zrobić w sposób uporządkowany. Chociaż, o ile mi wiadomo, foreach powinien zrobić to w kolejności.

+0

tak, ale to naprawdę brzydkie, wolałbym mieć pewność – Mike

15

Pętla foreach użyje iterator wbudowany w Collection, więc kolejność uzyskać wyniki w zależeć będzie od tego, czy Collection utrzymuje jakąś celu elementów.

Jeśli zapętlisz się na numer ArrayList, otrzymasz elementy w kolejności, w jakiej zostały wstawione (zakładając, że nie sortujesz ArrayList). Jeśli zapętlasz ponad HashSet, wszystkie zakłady są wyłączone, ponieważ HashSets nie utrzymuje żadnego porządku.

Jeśli chcesz zagwarantować zamówienie na elementy w kolekcji, zdefiniuj numer Comparator, który określa tę kolejność i użyj Collections.sort(Collection<T>, Comparator<? super T>).

10

Tak, specyfikacje języka Java zapewnić

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

jest równoważna

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

nie "zmiana w kolejności" jest dozwolone.

Powiązane problemy