2009-09-04 15 views
45

¿Un bucle java para cada bucle garantiza que los elementos se presentarán en orden si se invocan en una lista? En las pruebas que se parece, pero me parece que no puede encontrar el mencionado explícitamente en cualquier documentaciónJava For-Each Loop: orden de clasificación

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

#output 
1,2,3,4 

Respuesta

3

Se podría utilizar un bucle, a la for (int i = 0; i < myList.length(); i++) si quiere hacerlo de una manera ordenada. Aunque, hasta donde yo sé, foreach debería hacerlo en orden.

+0

sí, pero eso es realmente feo, prefiero estar seguro acerca de cada uno – Mike

15

El bucle foreach utilizará el repetidor integrado en el Collection, por lo que el fin de obtener resultados en dependerá de si o no el Collection mantiene algún tipo de orden a los elementos.

Por lo tanto, si está pasando por encima de un ArrayList, obtendrá los elementos en el orden en que se insertaron (suponiendo que no haya procedido a ordenar el ArrayList). Si está pasando por encima de un HashSet, todas las apuestas están apagadas, ya que los HashSets no mantienen ningún pedido.

Si necesita garantizar un pedido a los elementos en la Colección, defina un Comparator que establezca ese pedido y use Collections.sort(Collection<T>, Comparator<? super T>).

10

Sí, las especificaciones del lenguaje Java asegurar que

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

es equivalente a

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

ningún "cambio en la ordenación" está permitido.