ListIterator支持双向遍历,首次调用previous()会抛出NoSuchElementException,需先调用next()或用list.listIterator(list.size())定位到末尾再向前遍历。

ListIterator 是 Java 中用于双向遍历列表的迭代器,它不仅支持向后遍历(next()),也支持向前遍历(previous())。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
向前遍历的关键方法:previous()
调用 previous() 会返回当前光标位置**前一个**元素,并将光标向左移动一位。注意:初始时,光标位于索引 0 的**左侧**(即“开头之前”),所以首次调用 previous() 会抛出 NoSuchElementException —— 必须先用 next() 推进一次,或用 add()/set() 调整位置后才能安全向前。
正确向前遍历的典型步骤
- 创建 ListIterator:例如
ListIterator<string> itr = list.listIterator();</string> - 先向后走一步(可选,取决于起始需求):
itr.next();—— 此时光标在索引 1 左侧,可对索引 0 元素调用previous() - 用
hasPrevious()判断是否还能向前:while (itr.hasPrevious()) { ... itr.previous(); } - 若想从末尾开始倒序遍历,更推荐:先定位到末尾 →
ListIterator<e> itr = list.listIterator(list.size());</e>,此时光标就在最后一个元素之后,可直接用previous()向前取值
一个完整示例:从后往前打印列表
// 假设 list = ["a", "b", "c"]
ListIterator<String> itr = list.listIterator(list.size());<br>
while (itr.hasPrevious()) {<br>
System.out.println(itr.previous()); // 输出: c, b, a<br>
}
注意事项
-
previous()和next()都会改变光标位置,混合调用时需留意当前指向 -
nextIndex()返回下一次next()将返回的元素索引;previousIndex()返回下一次previous()将返回的元素索引(即当前光标左侧索引) - 不支持并发修改:遍历中直接修改底层列表(如
list.add())会触发ConcurrentModificationException,应使用itr.add()或itr.remove()

















