在 Java 里,ListIteratorIterator 均为用于遍历集合元素的迭代器接口,不过二者存在一些差异,并且 ListIterator 具备额外的功能。下面将详细阐述:

1. Iterator 接口

Iterator 是 Java 集合框架中最基础的迭代器接口,其作用是遍历集合中的元素。它定义了以下关键方法:

  • hasNext():用于判断集合中是否还有下一个元素。
  • next():返回集合中的下一个元素。
  • remove():移除 next() 方法返回的最后一个元素。

以下是一个使用 Iterator 遍历 List 的示例:

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

public class IteratorExample {
    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();
            System.out.println(element);
        }
    }
}

2. ListIterator 接口

ListIteratorIterator 的子接口,它专门用于遍历 List 集合。ListIterator 提供了比 Iterator 更多的功能,具体如下:

  • 双向遍历:不仅能向前遍历,还能向后遍历。
  • 元素操作:可在遍历过程中添加、修改元素。
  • 获取索引:能够获取当前元素的索引。

ListIterator 定义了以下额外方法:

  • hasPrevious():判断集合中是否还有前一个元素。
  • previous():返回集合中的前一个元素。
  • nextIndex():返回下一个元素的索引。
  • previousIndex():返回前一个元素的索引。
  • add(E e):在当前位置添加一个元素。
  • set(E e):用指定元素替换 next()previous() 返回的最后一个元素。

以下是一个使用 ListIterator 双向遍历 List 的示例:

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();

        // 向前遍历
        System.out.println("Forward traversal:");
        while (listIterator.hasNext()) {
            String element = listIterator.next();
            System.out.println(element);
        }

        // 向后遍历
        System.out.println("Backward traversal:");
        while (listIterator.hasPrevious()) {
            String element = listIterator.previous();
            System.out.println(element);
        }
    }
}

3. 二者的区别及额外功能总结

  • 遍历方向Iterator 仅支持向前遍历,而 ListIterator 支持向前和向后双向遍历。
  • 元素操作Iterator 只能在遍历过程中移除元素,ListIterator 除了移除元素外,还能添加和修改元素。
  • 索引获取ListIterator 可以获取当前元素的索引,而 Iterator 没有这个功能。

综上所述,若只需进行简单的向前遍历并移除元素,使用 Iterator 即可;若需要双向遍历、添加或修改元素,以及获取元素索引,就应使用 ListIterator