java – iterarea unei liste legate (Programare, Java, Listă Legată)

tomermes a intrebat.

dacă folosesc o buclă for-each pe o listă legată în java, este garantat faptul că voi itera elementele în ordinea în care apar în listă?

6 răspunsuri
Dave G

Lista legată este garantată să acționeze în ordine secvențială.

Din documentație

O colecție ordonată (cunoscută și sub numele de secvență). Utilizatorul acestei interfețe are un control precis asupra locului din listă în care este introdus fiecare element. Utilizatorul poate accesa elementele prin indexul lor întreg (poziția în listă) și poate căuta elemente în listă.

iterator()Returnează un iterator peste elementele din această listă în ordinea corectă.

Gherbi Hicham

Am găsit 5 moduri principale de a itera peste o listă legată în Java (inclusiv modul Java 8):

  1. Bucla For
  2. Bucla For îmbunătățită
  3. Bucla While
  4. Iterator
  5. Utilizare stream() a colecțiilor (Java8)

Bucla For

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));
}

Bucla For îmbunătățită

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

Bucla While

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

Iterator

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

colecție stream() util (Java 8)

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

Un lucru care trebuie subliniat este că timpul de execuție al bucla For sau bucla While este O(n pătrat), deoarece get(i) operația durează O(n) timp (a se vedea acest lucru pentru detalii). Celelalte 3 moduri necesită timp liniar și au performanțe mai bune.

Comentarii

  • Minunat. Nu știam despre LinkedList.size() . +1. –  > Por roottraveller.
  • Pentru iterație ar funcționa și doar folosind linkedList.forEach(e -> System.out.println(e)););. –  > Por Tarun.
  • Timpul liniar și O(n) sunt același lucru, nu-i așa? –  > Por pooria.
  • @pooria da, sunt același lucru. –  > Por sjkm.
  • Întrebare despre soluția Iterator. Se creează o nouă structură de memorie care copiază toate elementele din LinkedList sau se creează o nouă structură de memorie care conține referințe (pointeri?) la valoarea fiecărui element din LinkedList? De ce este mai rapidă decât soluția get(i)? Este din cauză că get(i) trebuie să parcurgă arborele, cel puțin parțial, LinkedList.size() de mai multe ori pentru a obține adresa pentru următorul element?” (ar fi linkedList.size()*(linkedList.size()+1)/2 ori, nu?) – (ar fi linkedList.size()+1)/2 ori, nu?  > Por Brad Davis.
krantboy

După cum spune definiția lui Linkedlist, este o secvență și este garantat că veți obține elementele în ordine.

De ex:

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+"->");
  }
}

Caleb Hillary

Linked list garantează ordinea secvențială.

Nu folosiți linkedList.get(i), , mai ales în interiorul unei bucle secvențiale, deoarece învinge scopul de a avea o listă legată și va fi un cod ineficient.

Utilizați ListIterator

    ListIterator<Object> iterator = myLinkedList.listIterator();
    while( iterator.hasNext()) {
        System.out.println(iterator.next());
    }

Marcin Michalski

Fiecare implementare java.util.List trebuie să păstreze ordinea, astfel încât fie că folosiți ArrayList, LinkedList, Vector etc., fiecare dintre acestea sunt colecții ordonate și fiecare dintre ele păstrează ordinea de inserție (a se vedea http://download.oracle.com/javase/1.4.2/docs/api/java/util/List.html)

Anuj Dhiman
iterate LinkedList by using iterator

LinkedList<String> linkedList = new LinkedList<String>();
linkedList.add(“Mumbai”);
linkedList.add(“Delhi”);
linkedList.add(“Noida”);
linkedList.add(“Gao”);
linkedList.add(“Patna”);

Iterator<String>  itr = linkedList.iterator();
 while (itr.hasNext()) {
 System.out.println(“Element is =”+itr.next());

 }

Referință : Exemple Java Linkedlist