У меня есть следующий фрагмент кода:Почему список итератора в Java не возвращает правильный элемент при изменении направления
LinkedList<String> list = new LinkedList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
ListIterator<String> iterator = list.listIterator();
String str = iterator.next();
System.out.println(str);
str = iterator.next();
System.out.println(str);
str = iterator.next();
System.out.println(str);
System.out.println("switch direction");
str = iterator.previous();
System.out.println(str);
str = iterator.previous();
System.out.println(str);
выход заключается в следующем:
1
2
3
switch direction
3
2
Я должен был бы напечатать сверху итератор.previous() call, но нет. Это дает мне один и тот же элемент, так как эта функция ничего не делает при первом вызове.
То же самое происходит, если я начинаю итерацию от последней до первой и меняю направление в середине назад до последнего.
Есть ли причина дизайна для этого или это может быть просто ошибка в итераторе списка Java?
Я использую:
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
Также из Javadoc: ListIterator не имеет текущего элемента; его позиция курсора всегда находится между элементом, который будет возвращен вызовом previous() и элементом, который будет возвращен вызовом next() –