listiterator 支持双向遍历、获取索引、增删改操作,仅适用于 list;普通 iterator 仅单向遍历、无索引、仅支持删除,适用于所有 collection。

ListIterator 和 普通 Iterator 都能遍历集合,但在双向遍历能力上存在本质区别:普通 Iterator 只支持单向(从头到尾)遍历,而 ListIterator 明确设计为支持双向(向前和向后)遍历,且具备更多与位置操作相关的功能。
能否反向遍历
普通 Iterator 没有反向遍历方法,只有 next() 和 hasNext(),无法回退或逆序访问元素。
ListIterator 提供了 previous() 和 hasPrevious(),可从当前位置往回走,实现真正的双向移动。
是否支持获取当前索引位置
普通 Iterator 不暴露任何索引信息,无法知道当前遍历到第几个元素。
ListIterator 提供 nextIndex() 和 previousIndex(),能精确返回下一个或上一个元素的下标,便于定位和插入操作。
是否支持增删改操作
- 普通 Iterator 仅允许安全删除(remove()),不支持添加或修改元素;
- ListIterator 支持 add(E)(在当前位置前插入)、set(E)(替换上一次 next() 或 previous() 返回的元素),以及 remove();
- 这些操作都基于明确的位置语义,与双向遍历紧密配合。
适用范围不同
普通 Iterator 是所有 Collection 的通用接口,适用于 Set、Queue、List 等任意集合类型。
ListIterator 仅适用于 List 及其子类(如 ArrayList、LinkedList),因为双向遍历和索引操作依赖于元素的有序位置特性,Set 等无序结构不支持。










