Я написал приведенную ниже программу для итерации в списке, но при альтернативном обходе next() and previous()
он повторяет элемент. Я знаю исправление, поставив индикатор и используя его для extra next
и extra previous
до моей логики печати. Но я хочу знать, почему такое поведение и каков алгоритм работы итератора.
Я уже проверил javaDoc, и там написано так:
следующий
Возвращает следующий элемент в списке. Этот метод может вызываться неоднократно для перебора списка или смешиваться с вызовами предыдущего для перехода вперед и назад. (Обратите внимание, что при чередовании вызовов следующего и предыдущего элементов будет неоднократно возвращаться один и тот же элемент.)
но вопрос почему? и какова логика или цель этого?
public class IterateLinkedListUsingListIterator {
public static void main(String[] args) throws NumberFormatException,
IOException {
LinkedList lList = new LinkedList();
lList.add("1");
lList.add("2");
lList.add("3");
lList.add("4");
lList.add("5");
ListIterator itr = lList.listIterator();
boolean ch = true;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (ch) {
System.out.println("Enter choice");
int chi = Integer.parseInt(br.readLine());
switch (chi) {
case 1:
if (itr.hasNext()) {
System.out.println(itr.next());
}
break;
case 2:
if (itr.hasPrevious()) {
System.out.println(itr.previous());
}
break;
default:
ch = false;
}
}
}
}
согласно ответу @vincrichaud и указателю java doc курсор указывает между элементом, а не на элементе, почему это так? есть ли какая-то конкретная причина для этого.
Element(0) Element(1) Element(2) ... Element(n-1)
cursor positions: ^ ^ ^ ^ ^