Java - повторение связанного списка
если я использую цикл for-each в связанном списке в java,
гарантировано, что я буду перебирать элементы в порядке
в котором они отображаются в списке?
Ответы
Ответ 1
Связанный список гарантированно действует в последовательном порядке.
Из документации
Упорядоченная коллекция (также известная как последовательность). Пользователь этого интерфейса имеет точный контроль над тем, где в списке каждый элемент вставлен. Пользователь может получить доступ к элементам по их целочисленному индексу (позиции в списке) и искать элементы в списке.
iterator() Возвращает итератор для элементов в этом списке в правильной последовательности.
Ответ 2
Я нашел 5 основных способов перебора связанного списка в Java (включая способ Java 8):
- Для циклы
- Улучшено для цикла
- Пока петля
- Итератор
- 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)