Java 中 Iterator 和 ListIterator 的区别

javaobject oriented programmingprogramming更新于 2025/11/21 19:24:17

Java 提供了这两个接口来逐个遍历存储在集合中的数据。迭代器和列表迭代器的内部实现使它们有所不同,但两个迭代器的主要目的是相同的。

以下是 Iterator 和 ListIterator 之间的重要区别。

Sr.否。键迭代器ListIterator
1适用迭代器可用于遍历任何集合,无论集合的类型如何。列表迭代器只能用于迭代列表集合实现的类,例如arraylist,linkedlist等。
2调用如上所述,必须使用 Iterator 来枚举所有 Collections 实现的接口(如 Set、List、Queue、Deque)中的元素,以及所有 Map 接口实现的类中的元素。通过调用 Collection 接口的 iterator() 方法可以创建 Iterator 对象。另一方面,当我们想要枚举 List 的元素时,必须使用 ListIterator。可以通过调用 List 接口中的 listIterator() 方法创建 ListIterator 对象。
3数据遍历迭代器的数据遍历只能在一个方向上进行,因为 Iterator 只能向前遍历List 迭代器可以向前和向后遍历,这使得数据可以在两个方向上遍历。
4删除在迭代器的情况下,不允许删除元素。ListIterator 可以替换列表集合中的元素。
5添加在迭代器的情况下,不允许添加元素,因为它会引发 ConcurrentModificationException。ListIterator 可以随时轻松地在列表集合中添加元素。
6修改对于迭代器,不允许修改元素,因为它会引发 ConcurrentModificationException。ListIterator 可以随时通过调用 set() 方法轻松修改列表集合中的元素。
7元素的索引使用迭代器时,无法获取集合中遍历元素的索引。ListIterator 具有 nextIndex() 和 previousIndex() 等方法,可在遍历 List 时随时获取元素的索引。

Iterator 与 ListIterator 的示例

JavaTester.java

import java.io.*;
import java.util.*;
public class JavaTester {
   public static void main(String[] args){
      ArrayList<Integer> list = new ArrayList<Integer>();
      list.add(1);
      list.add(2);
      list.add(3);
      list.add(4);
      list.add(5);
      //Iterator
      Iterator itr = list.iterator();
      System.out.println("Iterator traversal:");
      while (itr.hasNext())
      System.out.print(itr.next() + " ");
      System.out.println();
      // ListIterator
      ListIterator i = list.listIterator();
      System.out.println("ListIterator Forward traversal:");
      while (i.hasNext()){
         System.out.print(i.next() + " ");
         System.out.println();
         System.out.println("ListIterator Backward traversal : ");
      }
      while (i.hasPrevious()){
         System.out.print(i.previous() + " ");
         System.out.println();
      }
   }
}

输出

Iterator traversal:
1 2 3 4 5
ListIterator Forward traversal:
1
ListIterator Backward traversal :
2
ListIterator Backward traversal :
3
ListIterator Backward traversal :
4
ListIterator Backward traversal :
5
ListIterator Backward traversal :
5
4
3
2
1

相关文章


有用资源