java - повторение связанного списка - PullRequest
20 голосов
/ 22 января 2011

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

Ответы [ 5 ]

41 голосов
/ 25 июня 2016

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

  1. для цикла
  2. Улучшено для цикла
  3. Во время цикла
  4. Итератор
  5. Использование коллекций stream () (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()); 
}

сбор потока () util (Java 8)

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

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

13 голосов
/ 22 января 2011

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

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

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

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

7 голосов
/ 13 июля 2011

Как сказано в определении 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+"->");
  }
}
3 голосов
/ 05 февраля 2019

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

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

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

    ListIterator<Object> iterator = myLinkedList.listIterator();
    while( iterator.hasNext()) {
        System.out.println(iterator.next());
    }
0 голосов
/ 22 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...