📜  Java中的双端迭代器()方法(1)

📅  最后修改于: 2023-12-03 14:42:56.199000             🧑  作者: Mango

Java中的双端迭代器()

在Java中,集合类和映射类都支持使用Iterator来进行迭代操作。双端迭代器(或者称为ListIterator)是一种特殊的迭代器,它比普通的Iterator更加强大,主要表现在可以在迭代过程中双向移动。

基本用法
获取双端迭代器

List接口继承了Collection接口,因此List类型的集合都可以使用双端迭代器。我们可以通过List接口的listIterator()方法来获取一个ListIterator对象:

List<String> list = new ArrayList<>();
ListIterator<String> iterator = list.listIterator();

另外,还可以通过List接口的listIterator(int index)方法来获取指定位置上的ListIterator对象:

List<String> list = new ArrayList<>();
ListIterator<String> iterator = list.listIterator(2);
操作元素
public interface ListIterator<E> extends Iterator<E> {
    boolean hasNext();
    E next();
    boolean hasPrevious();
    E previous();
    int nextIndex();
    int previousIndex();
    void remove();
    void set(E e);
    void add(E e);
}

除了常见的Iterator方法(hasNext, next, remove)之外,ListIterator还提供了一些新的方法。hasPrevious()和previous()可以用来检查和获取上一个元素, nextIndex()和previousIndex()可以用来获取迭代器的当前位置, set()和add()则可以用来修改和添加元素。

使用双端迭代器删除指定元素

假设现在有一个存放String类型的List集合,需要我们从集合中删除一个或多个指定的元素,可以考虑使用Iterator迭代器。

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String element = iterator.next();
    if (element.equals("A") || element.equals("B")) {
        iterator.remove();
    }
}

但是,如果这个List集合被重复使用,那么再次调用iterator()时就会返回一个新的Iterator实例,集合中原有的元素还未被删除,这使得要删除的元素可能并不在迭代器中,这种情况下,可以考虑使用ListIterator双端迭代器。

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("A");

ListIterator<String> iterator = list.listIterator();
while (iterator.hasNext()) {
    String element = iterator.next();
    if (element.equals("A") || element.equals("B")) {
        iterator.remove();
    }
}

这个例子中,我们使用了ListIterator,遍历List的时候,同时可以使用它的remove()方法进行元素的删除,而不会像使用Iterator那样同时破坏了List的结构。