文章目录
- [238. Java 集合 - 使用 `ListIterator` 遍历 `List` 元素](#238. Java 集合 - 使用
ListIterator遍历List元素) -
-
- [🛠️ `ListIterator` 的优势](#🛠️
ListIterator的优势) - [📝 示例:使用 `set()` 修改列表中的元素](#📝 示例:使用
set()修改列表中的元素) - 运行结果:
- [🎯 常见 `ListIterator` 使用场景](#🎯 常见
ListIterator使用场景) - [⚡ 小结](#⚡ 小结)
- [🛠️ `ListIterator` 的优势](#🛠️
-
238. Java 集合 - 使用 ListIterator 遍历 List 元素
在 List 接口中,你可以使用 ListIterator 来更灵活地遍历元素。你可以通过 listIterator() 方法获得一个 ListIterator。此方法可以不带参数调用,或者传入一个整数索引,从该索引位置开始迭代。
🛠️ ListIterator 的优势
ListIterator 继承自常规的 Iterator,并且提供了更多功能,使得你可以双向遍历元素,并修改正在遍历的元素。主要新增方法如下:
- hasPrevious() 和 previous():允许你反向迭代(从最后一个元素开始,向前移动)。
- nextIndex() 和 previousIndex() :返回下一个
next()调用或下一个previous()调用将返回的元素的索引。 - set(element) :用于更新
next()或previous()返回的上一个元素。如果在调用next()或previous()之前调用该方法,会抛出IllegalStateException。
📝 示例:使用 set() 修改列表中的元素
java
import java.util.*;
public class ListIteratorExample {
public static void main(String[] args) {
List<String> numbers = Arrays.asList("one", "two", "three");
// 获取 ListIterator 实例
for (ListIterator<String> iterator = numbers.listIterator(); iterator.hasNext();) {
String nextElement = iterator.next();
// 找到 "two" 并将其替换为 "2"
if (Objects.equals(nextElement, "two")) {
iterator.set("2");
}
}
// 输出修改后的 List
System.out.println("numbers = " + numbers); // [one, 2, three]
}
}
运行结果:
java
numbers = [one, 2, three]
在这个例子中,我们使用 ListIterator 迭代 numbers 列表,查找到 "two" 后将其替换为 "2"。可以看到,set() 方法直接修改了该位置的元素。
🎯 常见 ListIterator 使用场景
- 双向遍历:
ListIterator支持正向和反向遍历,这是普通Iterator无法做到的。你可以先正向遍历,遇到某个元素后反向遍历。 - 修改遍历元素:
ListIterator的set()方法使得我们可以在遍历时直接修改元素,避免了先取出再修改的麻烦。 - 获取索引: 通过
nextIndex()和previousIndex(),你可以在遍历时随时获取当前元素的索引。这对于某些需要索引位置的场景非常有用。
⚡ 小结
ListIterator继承了Iterator,使得你可以双向遍历 ,并且通过set()方法直接修改正在遍历的元素。- 常见方法:
hasPrevious():检查是否有前一个元素previous():返回前一个元素nextIndex()和previousIndex():返回当前的下一个或上一个元素的索引set(element):修改当前遍历元素