Согласно документации Java:
ListIterator не имеет текущего элемента; его позиция курсора всегда находится между элементом, который будет возвращен вызовом предыдущей(), и элементом, который будет возвращен вызовом следующей(). Итератор для списка длины n имеет n+1 возможных позиций курсора, как показано символами вставки (^) ниже:
Мой вопрос, например, предположим, что цикл while выполняется, и при нажатии 2 я вызываю метод
public void callNextElement(int choice, LinkedList<String> linkedList) {
ListIterator<String> listIterator = linkedList.listIterator();
if (choice == 2) {
if (listIterator.hasNext()){
listIterator.next();
System.out.println("We have: " + listIterator.next());
}
}
}
Теперь это напечатает первый элемент и вернется к циклу while для ввода, теперь снова нажав 2, я получу первый элемент/запись списка. И если бы я сделал:
System.out.println("We have: " + listIterator.next());
System.out.println("We have: " + listIterator.next());
System.out.println("We have: " + listIterator.next());
System.out.println("We have: " + listIterator.next());
....
Это напечатает другие элементы в связанном списке
Итак, мои вопросы:
Почему он не распечатывает 2-й элемент и так далее в методе, который я вызвал?
Почему это работает только, если listiterator.next() вызывается последовательно, как я сделал, напечатав их выше?
Что произойдет, если listiterator на самом деле сохранит позицию следующего элемента, чтобы при вызове
next()
(без последовательности) он печатал следующий элемент? Не первый.
РЕДАКТИРОВАТЬ:
Я чувствую себя таким глупым, но это сборка мусора Java работает в моем вызове метода? Если да, то имеет смысл, почему он каждый раз печатает 1-й элемент. Я новичок в Java и совершенно забыл об этом...
linkedList.listIterator()
создает новый итератор списка со своей собственной информацией о позиции (в этом случае это будет начало списка, поэтому каждыйnext()
в отдельных новых итераторах списка приведет к первому элемент - при условии, что список не пуст). - person Pshemo   schedule 04.09.2018