Чтобы ответить на ваши вопросы, вы должны понимать, что Iterator
запоминает свою позицию в Collection
или Iterable
, но только тот же экземпляр Iterator
знает эту позицию (т.е. сколько раз Iterator.next()
имеет был назван)
1) Почему он не печатает второй элемент и т. Д. В методе, который я вызвал?
ListIterator<String> listIterator = linkedList.listIterator();
В этой строке вашего метода вы создаете новый Iterator
для списка каждый раз, когда вызываете этот метод. Новый Iterator
всегда будет начинаться с начала списка. Вот почему вы всегда будете получать только первый элемент списка.
2) Почему это работает, только если listiterator.next () вызывается в последовательности? как я сделал, напечатав их выше.
Как упомянуто выше, новый итератор всегда будет начинаться (или, более правильно, до) с первого элемента списка. Вызывая Iterator.next()
, вы перемещаете итератор к следующему элементу списка. Если вы звоните next()
несколько раз на один и тот же Iterator
, вы будете перемещаться по всему списку, пока Iterator.hasNext()
не вернет false
. Если Iterator.hasNext()
равно false
, и вы продолжаете звонить Iterator.next()
, то NoSuchElementException
будет сброшено.
3) Что произойдет, если listiterator фактически сохранит позицию следующего элемента, чтобы, даже если next () вызывался (без последовательности), он печатал следующий элемент? Не первый.
Я думаю, что на это уже ответили выше?!
Вы можете изменить свой метод так, чтобы он принимал Iterator
в качестве аргумента вместо списка следующим образом:
public void callNextElement(int choice, ListIterator<String> listIterator) {
if (choice == 2) {
if (listIterator.hasNext()){
listIterator.next()
System.out.println("We have: " + listIterator.next());
}
}
}
Этот метод будет вызываться так:
ListIterator<String> listIterator = linkedList.listIterator();
while (condition == true) {
callNextElement(choice, listIterator);
}
Таким образом, вы всегда будете передавать одинаковые Iterator
методу callNextElement и последовательно продвигать позицию этого итератора.
И нет, это никак не связано с сборкой мусора.