我们知道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
从字面上看,所以当我这样做时previous()
它给了我歌之前 那个?我怎样才能最终以简单的方式理解这个概念?
最佳答案
看看ListIterator
的javadoc ...
Element(0) Element(1) Element(2) ... Element(n-1) cursor positions: ^ ^ ^ ^ ^
在迭代开始时,光标指向第一个元素之前。
调用
next()
(1) 检索光标位置之后的第一个元素,(2) 使光标前进到检索到的元素之后。调用
previous()
(1) 检索光标位置之前的第一个元素,(2) 将光标设置为指向检索到的元素之前。让我们检查一下有问题的输出的第 3 行和第 4 行之间发生了什么。
第二行输出后迭代器的状态:
"song1" "song2" "song3" "song4"
cursor position: ^
现在您调用next()
再次输出"song3"
.您的迭代器状态如下所示: "song1" "song2" "song3" "song4"
cursor position: ^
此时您调用previous()
和 "song3"
再次打印。操作后的迭代器状态如下: "song1" "song2" "song3" "song4"
cursor position: ^
关于java - 为什么我需要在 ListIterator 中调用 previous() 两次才能进行 'reverse' 迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64103558/