Java - повторение связанного списка

если я использую цикл for-each в связанном списке в java, гарантировано, что я буду перебирать элементы в порядке в котором они отображаются в списке?

Ответы

Ответ 1

Связанный список гарантированно действует в последовательном порядке.

Из документации

Упорядоченная коллекция (также известная как последовательность). Пользователь этого интерфейса имеет точный контроль над тем, где в списке каждый элемент вставлен. Пользователь может получить доступ к элементам по их целочисленному индексу (позиции в списке) и искать элементы в списке.

iterator() Возвращает итератор для элементов в этом списке в правильной последовательности.

Ответ 2

Я нашел 5 основных способов перебора связанного списка в Java (включая способ Java 8):

  1. Для циклы
  2. Улучшено для цикла
  3. Пока петля
  4. Итератор
  5. Collectionss stream() util (Java8)

Для цикла

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

Улучшено для цикла

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

Пока цикл

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

Итератор

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

коллекция stream() util (Java 8)

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

Следует отметить, что время выполнения цикла For Loop или While Loop равно O (n квадрат), поскольку операция get(i) занимает время O (n) (подробности см. В этом разделе). Другие 3 способа занимают линейное время и работают лучше.

Ответ 3

Как указывает определение Linkedlist, это последовательность, и вы гарантированно получите элементы в порядке.

например:

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

Ответ 4

Связанный список гарантирует последовательный порядок.

Не используйте relatedList.get(i), особенно внутри последовательного цикла, так как он не имеет смысла иметь связанный список и будет неэффективным кодом.

Использовать ListIterator

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

Ответ 5

Каждая реализация java.util.List требуется для сохранения порядка, так что вы используете ArrayList, LinkedList, Vector и т.д. каждая из них представляет собой упорядоченные коллекции, и каждый из них сохраняет порядок вставки (см. http://download.oracle.com/javase/1.4.2/docs/api/java/util/List.html)