Iterator用于单向遍历所有Collection集合,支持遍历中删除元素;ListIterator仅适用于List,支持双向遍历、修改、添加元素,功能更强大但使用范围受限。

Java中的Iterator和ListIterator是两种用于遍历集合的接口,它们在功能和使用场景上有所不同。理解它们的区别和用法,有助于更高效地操作集合元素。
Iterator:单向遍历集合
Iterator是最基础的迭代器,适用于所有Collection类型(如List、Set等),只能从前往后单向遍历。
常用方法包括:
-
hasNext():判断是否还有下一个元素 -
next():获取下一个元素 -
remove():删除当前迭代到的元素(可选操作)
示例代码:
立即学习“Java免费学习笔记(深入)”;
Listlist = Arrays.asList("a", "b", "c"); Iterator it = list.iterator(); while (it.hasNext()) { String item = it.next(); System.out.println(item); // 安全删除 if ("b".equals(item)) { it.remove(); } }
注意:必须调用 next() 后才能调用 remove(),否则会抛出异常。
ListIterator:双向遍历List集合
ListIterator是Iterator的增强版,仅适用于List实现类(如ArrayList、LinkedList),支持双向遍历和修改操作。
它除了具备Iterator的功能外,还提供以下方法:
-
hasPrevious():判断是否存在前一个元素 -
previous():返回前一个元素 -
nextIndex()和previousIndex():获取当前位置索引 -
add(E e):在当前位置前插入元素 -
set(E e):替换最后一次遍历返回的元素
示例:逆序遍历并修改元素
Listlist = new ArrayList<>(Arrays.asList("x", "y", "z")); ListIterator lit = list.listIterator(list.size()); // 从末尾开始 while (lit.hasPrevious()) { String item = lit.previous(); System.out.println(item); if ("y".equals(item)) { lit.set("Y"); // 替换为大写 } }
也可以从中间位置开始迭代,灵活控制遍历起点。
选择合适的迭代器
如果只是简单遍历或删除元素,Iterator足够使用,且兼容所有集合类型。
若需要反向遍历、添加元素或修改列表内容,应使用ListIterator,但前提是集合为List类型。
两者都不能保证线程安全,遍历时若有其他线程修改集合,会抛出ConcurrentModificationException。










