web-dev-qa-db-fra.com

java - itération d'une liste chaînée

si j'utilise une boucle for-each sur une liste liée en Java, est-il garanti que je vais itérer sur les éléments dans l'ordre dans lequel ils apparaissent dans la liste?

17
tomermes

La liste chaînée est garantie pour agir dans un ordre séquentiel. 

De la documentation

Une collection ordonnée (également appelée séquence ). L'utilisateur de cette interface a un contrôle précis sur où dans le liste chaque élément est inséré. Le l'utilisateur peut accéder aux éléments par leur index entier (position dans la liste), et rechercher des éléments dans la liste.

iterator () Renvoie un itérateur sur les éléments de cette liste dans l'ordre approprié. 

11
Dave G

J'ai trouvé 5 méthodes principales pour parcourir une liste chaînée en Java (y compris la méthode Java 8):

  1. For Loop 
  2. Enhanced For Loop 
  3. While Loop 
  4. Iterator
  5. Stream de Collections () util (Java8)

Pour la boucle

LinkedList<String> linkedList = new LinkedList<>();
System.out.println("==> For Loop Example.");
for (int i = 0; i < linkedList.size(); i++) {
    System.out.println(linkedList.get(i));
}

Amélioré pour la boucle

for (String temp : linkedList) {
    System.out.println(temp);
}

Boucle en boucle

int i = 0;
while (i < linkedList.size()) {
    System.out.println(linkedList.get(i));
    i++;
}

Itérateur 

Iterator<String> iterator = linkedList.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next()); 
}

collection stream () util (Java 8)

linkedList.forEach((temp) -> {
    System.out.println(temp);
});

Une chose à noter est que le temps d'exécution de For Loop ou While Loop est égal à O (n carré) car l'opération get(i) prend O(n) fois ( voir ceci pour détails ). Les 3 autres méthodes prennent du temps linéaire et donnent de meilleurs résultats.

35
Gherbi Hicham

Comme le dit la définition de Linkedlist, il s’agit d’une séquence et vous êtes assuré d’obtenir les éléments dans l’ordre.

par exemple: 

import Java.util.LinkedList;

public class ForEachDemonstrater {
  public static void main(String args[]) {
    LinkedList<Character> pl = new LinkedList<Character>();
    pl.add('j');
    pl.add('a');
    pl.add('v');
    pl.add('a');
    for (char s : pl)
      System.out.print(s+"->");
  }
}
7
krantboy

La liste chaînée garantit un ordre séquentiel.

Ne pas utiliser linkedList.get (i), en particulier à l’intérieur d’une boucle séquentielle, car elle empêche la création d’une liste chaînée et constitue un code inefficace.

Utilisation ListIterator

    ListIterator<Object> iterator = wordTokensListJava.listIterator();
    while( iterator.hasNext()) {
        System.out.println(iterator.next());
    }
0
Caleb Hillary

Chaque implémentation Java.util.List est nécessaire pour conserver l’ordre. Vous devez donc utiliser ArrayList, LinkedList, Vector, etc. Chaque collection est ordonnée et chacun conserve l’ordre d’insertion (voir .Oracle.com/javase/1.4.2/docs/api/Java/util/List.html )

0
Marcin Michalski