Skip to content

迭代器

迭代器是用于遍历集合的工具。在 Java 里,Iterator接口为集合元素的遍历提供了支持。通过使用迭代器,能够按照顺序逐个访问集合中的元素,同时还可以在遍历过程中对元素进行移除操作。

迭代器的基本使用

下面是使用迭代器遍历List集合的示例代码:

java
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorExample {
    public static void main(String[] args) {
        // 创建一个 List 集合
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");

        // 获取迭代器
        Iterator<String> iterator = list.iterator();

        // 使用迭代器遍历集合
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.println(element);
        }
    }
}

在上述代码中:

  1. 首先创建了一个ArrayList集合,并且添加了几个元素。
  2. 接着调用集合的iterator()方法获取一个迭代器对象。
  3. 然后运用while循环和迭代器的hasNext()方法来检查是否还有下一个元素,若有则使用next()方法获取该元素并打印。

迭代器的移除操作

迭代器还提供了remove()方法,可在遍历过程中移除元素。示例如下:

java
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorRemoveExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");

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

        System.out.println(list);
    }
}

在这个示例中,当遍历到元素"banana"时,调用iterator.remove()方法将其从集合里移除。

ListIterator

对于List集合,还有一种特殊的迭代器ListIterator,它不仅具备Iterator的功能,还能进行双向遍历以及在遍历过程中添加元素。示例如下:

java
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ListIteratorExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");

        ListIterator<String> listIterator = list.listIterator();

        // 正向遍历
        while (listIterator.hasNext()) {
            System.out.println(listIterator.next());
        }

        // 反向遍历
        while (listIterator.hasPrevious()) {
            System.out.println(listIterator.previous());
        }

        // 在遍历过程中添加元素
        listIterator = list.listIterator();
        while (listIterator.hasNext()) {
            if (listIterator.next().equals("banana")) {
                listIterator.add("date");
            }
        }

        System.out.println(list);
    }
}

在上述代码中,先使用ListIterator进行正向遍历,再进行反向遍历,最后在遍历过程中当遇到元素"banana"时添加元素"date"