java为什么我需要在ListIterator中调用两次previous(),以便进行“反向”迭代?
我们知道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()
的时候,它会在之前给我一首歌?我怎样才能以简单的方式最终理解这个概念
# 1 楼答案
看看
ListIterator
的javadoc在迭代开始时,光标指向第一个元素之前的
调用
next()
(1)检索光标位置后的第一个元素,并(2)将光标向前移动到检索到的元素后的点调用
previous()
(1)检索光标位置之前的第一个元素,并(2)将光标设置为指向检索到的元素之前让我们来看看第三行和第四行输出之间发生了什么问题
第二行输出后迭代器的状态:
现在再次调用
next()
并输出"song3"
。迭代器状态如下所示:此时,您调用
previous()
,"song3"
再次打印。操作后的迭代器状态如下: