Java 为什么列表迭代器.next();回到“我的朋友”;“无当前元素”;位置,除非重复多次直到结束?
根据Java文档: ListIterator没有当前元素;其光标位置始终位于 在调用previous()返回的元素和 调用next()将返回的元素。迭代器 对于长度为n的列表,有n+1个可能的光标位置,如下所示 用以下插入符号(^)进行说明: 例如,我的问题是,假设一个while循环正在运行,按下2键时,我调用一个方法Java 为什么列表迭代器.next();回到“我的朋友”;“无当前元素”;位置,除非重复多次直到结束?,java,linked-list,listiterator,Java,Linked List,Listiterator,根据Java文档: ListIterator没有当前元素;其光标位置始终位于 在调用previous()返回的元素和 调用next()将返回的元素。迭代器 对于长度为n的列表,有n+1个可能的光标位置,如下所示 用以下插入符号(^)进行说明: 例如,我的问题是,假设一个while循环正在运行,按下2键时,我调用一个方法 public void callNextElement(int choice, LinkedList<String> linkedList) { ListI
public void callNextElement(int choice, LinkedList<String> linkedList) {
ListIterator<String> listIterator = linkedList.listIterator();
if (choice == 2) {
if (listIterator.hasNext()){
listIterator.next();
System.out.println("We have: " + listIterator.next());
}
}
}
这将打印链接列表中的其他元素
因此,我的问题是:
next()
(不连续),它也会打印下一个元素,会发生什么情况?不是第一个我觉得自己很愚蠢,但在我的方法调用中,是Java的垃圾收集在起作用吗?如果是,那么它每次打印第一个元素的原因是有道理的。我是Java新手,完全忘记了这一点…每个列表迭代器在列表中都有自己独立的位置。每次调用
listIterator()
都会得到一个从列表开头开始的新迭代器
ListIterator<String> listIterator = linkedList.listIterator();
ListIterator ListIterator=linkedList.ListIterator();
如果要对连续的元素进行迭代,需要调用一次
listIterator()
,并将迭代器保存在某个位置以便重用。要回答您的问题,您需要了解iterator
记住它在集合中的位置,但是只有迭代器的同一个实例知道这个位置(即调用了多少次迭代器.next()
)
1) 为什么它不打印出我调用的方法中的第二个元素等等
此方法的调用方式如下:
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);
}
ListIterator ListIterator=linkedList.ListIterator();
while(条件==true){
callNextElement(选项、列表迭代器);
}
通过这种方式,您将始终将相同的迭代器
传递给callNextElement方法,并依次提升该迭代器的位置
不,这绝对与垃圾收集无关。重新编辑:不,这与垃圾收集无关。Is只与以下事实有关:每个linkedList.listIterator()
使用其自身的位置信息创建新的列表迭代器(在本例中,它将是列表的开始,因此单独的新列表迭代器上的每个next()
都将产生第一个元素-假设列表不是空的)。
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);
}