掌握 Java ListIterator 接口:双向遍历与列表操作实战指南
Java ListIterator 接口
ListIterator 扩展 Iterator,支持双向遍历,可在 List 中前后移动并即时修改元素。
核心功能包括导航、移除、替换元素,是 Java 开发者处理列表的必备工具。
ListIterator 核心方法
hasNext()– 前方有元素返回truenext()– 移动并返回下一个元素nextIndex()– 返回next()将返回的元素索引previous()– 向后移动并返回前一个元素previousIndex()– 返回previous()将返回的元素索引remove()– 删除next()或previous()最后返回的元素set(E e)– 用指定值替换最后返回的元素
示例 1:向前导航
演示 next()、nextIndex()、hasNext():
import java.util.ArrayList;
import java.util.ListIterator;
class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(3);
numbers.add(2);
System.out.println("ArrayList: " + numbers);
ListIterator<Integer> iterator = numbers.listIterator();
int first = iterator.next();
System.out.println("Next Element: " + first);
int nextIndex = iterator.nextIndex();
System.out.println("Position of Next Element: " + nextIndex);
System.out.println("Is there any next element? " + iterator.hasNext());
}
}
输出
ArrayList: [1, 3, 2] Next Element: 1 Position of Next Element: 1 Is there any next element? true
示例 2:向后导航
演示 previous() 和 previousIndex(),先调用两次 next():
import java.util.ArrayList;
import java.util.ListIterator;
class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(3);
numbers.add(2);
System.out.println("ArrayList: " + numbers);
ListIterator<Integer> iterator = numbers.listIterator();
iterator.next();
iterator.next();
int prev = iterator.previous();
System.out.println("Previous Element: " + prev);
int prevIndex = iterator.previousIndex();
System.out.println("Position of the Previous element: " + prevIndex);
}
}
输出
ArrayList: [1, 3, 2] Previous Element: 3 Position of the Previous Element: 0
迭代器初始位于首元素之前,直接调 previous() 会抛异常。两次 next() 后位于 3 与 2 之间,故 previous() 返回 3。
java
- 掌握 C# 接口:定义、实现与实战场景全解析
- 精通 Java 运算符:类型、语法与实战示例
- Java 注释:类型、用法与最佳实践
- 精通 Java if…else:控制流全解析
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- 掌握 Java NavigableSet 接口:导航、排序与实战示例
- 掌握 Java Lambda 表达式:从基础到 Stream API 实战
- Java 接口 vs 抽象类:如何选择合适的抽象方式
- Java 接口全解析:定义契约、默认方法、多实现与标记接口
- Java 9 接口私有方法:增强封装与代码复用