【发布时间】:2021-01-14 02:49:14
【问题描述】:
我们知道ListIterator 的方法next() 和previous() 允许我们在两个方向上遍历。所以我做了一个小程序来试试看。
List<String> songs = new ArrayList<>();
songs.add("song1");
songs.add("song2");
songs.add("song3");
songs.add("song4");
ListIterator<String> iterator = songs.listIterator();
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.previous());
System.out.println(iterator.previous());
我期望得到的是:
song1
song2
song3
song2
song1
但我错了。实际结果如下:
song1
song2
song3
song3
song2
谁能告诉我这是怎么发生的?当我在song3 'in' 时,cursor 不就在那里,所以当我在previous() 时,它会给我before 那首歌?我怎样才能最终以简单的方式理解这个概念?
【问题讨论】:
-
ListIterator#previous() Javadoc 声明:“(注意交替调用 next 和 previous 将重复返回相同的元素。)”这与迭代器在调用 @ 时如何移动当前位置的事实有关987654330@ 和
previous(). -
我明白了,但这没有意义。为什么会有人想把它弄得那样混乱?
-
next实现返回当前项目,然后前进。这意味着在最后一次调用next之后指针指向song4。previous先前进后返回值,表示指针回到song3。