47 votes

Java For-Each Loop: Ordre de tri

Une boucle java pour chaque boucle garantit-elle que les éléments seront présentés dans l'ordre s'ils sont invoqués dans une liste? Il semble que dans mes tests, mais je n'arrive pas à trouver cela explicitement mentionné dans la documentation.

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

#output
1,2,3,4
 

48voto

hallidave Points 3887

Oui. La boucle foreach va parcourir la liste dans l'ordre fourni par l' iterator() méthode. Voir la documentation de l'objet iterable interface.

Si vous regardez la Javadoc de la Liste , vous pouvez voir que la liste est une "collection ordonnée" et que l' iterator() méthode retourne un itérateur qui itère "en bon ordre".

15voto

rjohnston Points 2450

L' foreach boucle d'utiliser l'itérateur construit dans l' Collection, donc l'ordre vous obtiendrez des résultats dépendra de savoir si ou de ne pas l' Collection maintient une sorte de commander aux éléments.

Donc, si vous êtes en boucle sur un ArrayList, vous obtiendrez les éléments dans l'ordre où ils ont été insérés (en supposant que vous n'avez pas à faire trier la liste de tableaux). Si vous êtes en boucle sur un HashSet, tous les paris sont éteints, depuis HashSets ne pas maintenir n'importe quel ordre.

Si vous avez besoin de vous garantir un pour les éléments de la Collection, de définir un Comparator qui établit l'ordre et de l'utilisation Collections.sort(Collection<T>, Comparator<? super T>).

10voto

Alex Martelli Points 330805

Oui, les spécifications du langage Java garantissent que

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

est équivalent à

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

aucun "changement de commande" n'est autorisé.

3voto

mgbowen Points 4952

Vous pouvez utiliser une boucle for, à la for (int i = 0; i < myList.length(); i++) si vous souhaitez le faire de manière ordonnée. Bien que, pour autant que je sache, foreach devrait le faire dans l’ordre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X