为什么hasPrevious()方法不能直接调用

时间:2020-03-06 19:38:12

标签: java

我不明白为什么删除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());
    }

1 个答案:

答案 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中的代码。