2009-09-04 14 views
45

Un ciclo java per ogni ciclo garantisce che gli elementi vengano presentati in ordine se richiamati in un elenco? Nel mio test che sembra, ma io non riesco a trovare questo esplicitamente menzionato nella documentazioneCiclo Java For-Each: Ordinamento

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

#output 
1,2,3,4 

risposta

46

Sì. Il ciclo foreach itererà attraverso l'elenco nell'ordine fornito dal metodo iterator(). Vedi lo documentation for the Iterable interface.

Se si guarda il Javadoc for List si può vedere che un elenco è una "raccolta ordinata" e che il metodo iterator() restituisce un iteratore che itera "nella giusta sequenza".

3

Si potrebbe utilizzare un ciclo for, alla for (int i = 0; i < myList.length(); i++) se si vuole farlo in modo ordinato. Tuttavia, per quanto ne so, foreach dovrebbe farlo in ordine.

+0

sì ma è davvero brutto, preferirei essere certo riguardo a – Mike

15

Il ciclo foreach utilizzerà l'iteratore integrato nel Collection, per cui l'ordine si ottengono risultati in dipenderà o meno la Collection mantiene qualche tipo di ordine agli elementi.

Quindi, se si esegue il ciclo su un ArrayList, si otterranno gli articoli nell'ordine in cui sono stati inseriti (presupponendo che non si sia proceduto all'ordinamento di ArrayList). Se esegui il ciclo su un numero HashSet, tutte le scommesse sono disattivate, poiché gli hashset non mantengono alcun ordine.

Se è necessario garantire un ordine agli elementi nella raccolta, definire uno Comparator che stabilisce tale ordine e utilizzare Collections.sort(Collection<T>, Comparator<? super T>).

10

Sì, le specifiche linguaggio Java sì che

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

è equivalente a

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

nessun "cambiamento di ordinamento" è consentito.