我不明白为什么删除hasNext()方法时hasPrevious方法不起作用..它们之间是否有某种联系?所以我的问题是为什么我不能在调用Listiterator接口后直接调用hasprevious方法
List<Integer> li = new ArrayList<Integer>();
ListIterator<Integer> itr = null;
li.add(22);
li.add(44);
li.add(88);
li.add(11);
li.add(33);
itr = li.listIterator();
System.out.println("In reverse order :");
System.out.println(itr.hasPrevious());
while (itr.hasPrevious()) {
System.out.print(""+itr.previous());
}
答案 0 :(得分:0)
如果您要从头开始导航,请声明ListIterator
,如下所示:
ListIterator<Integer> itr = list.listIterator(li.size());
这会将迭代器指向您可以向后导航的末端。
演示:
import java.util.List;
import java.util.ListIterator;
public class Main {
public static void main(String[] args) {
List<Integer> li = List.of(1, 2, 3, 4, 5);
ListIterator<Integer> itr = li.listIterator(li.size());
while (itr.hasPrevious()) {
System.out.println(itr.previous());
}
}
}
输出:
5
4
3
2
1
如果您从列表的开头开始并向前移动,则始终可以使用previous
来返回,例如
import java.util.List;
import java.util.ListIterator;
public class Main {
public static void main(String[] args) {
List<Integer> li = List.of(1, 2, 3, 4, 5);
ListIterator<Integer> itr = li.listIterator();
System.out.println("Moving forward:");
while (itr.hasNext()) {
System.out.println(itr.next());
}
System.out.println("Moving backward:");
while (itr.hasPrevious()) {
System.out.println(itr.previous());
}
}
}
输出:
Moving forward:
1
2
3
4
5
Moving backwards:
5
4
3
2
1
TL; DR 如果迭代器已经位于开头,则它不会向后移动。同样,如果迭代器已经在末尾,它也不会向前移动。
检查this中的代码。