Iterator 与 ListIterator:Java 集合框架中的遍历器比较
- 1、Iterator
- 1.1 特点
- 2、ListIterator
- 2.1 特点
- 3、Iterator 和 ListIterator 的区别
- 4、示例
- 4.1 使用 Iterator 遍历 Set
- 4.2 使用 ListIterator 遍历 List 并修改
- 5、总结
💖The Begin💖点点关注,收藏不迷路💖
|
在Java的集合框架中,遍历集合元素通常有两种主要的遍历器:Iterator
和 ListIterator
。尽管它们都是用于遍历集合的工具,但它们在功能和使用上存在一些关键的区别。
1、Iterator
Iterator
是Java集合框架中的一个核心接口,它允许我们遍历(即逐个访问)集合中的元素,而无需了解集合底层的实现细节。Iterator
接口的主要方法是:
hasNext()
:判断是否存在下一个元素。next()
:返回集合中的下一个元素,并将迭代器的游标向前移动一位。remove()
(可选):删除迭代器最后返回的元素。
1.1 特点
- 适用于任何实现了
Collection
接口的集合,包括Set
和List
。 - 只能进行前向遍历。
- 不提供直接访问元素索引的方法。
- 不允许在遍历过程中修改集合的结构(除了通过
remove()
方法删除当前元素外)。
2、ListIterator
ListIterator
是 Iterator
的子接口,专为 List
集合设计。它除了继承 Iterator
的功能外,还提供了更多的操作来遍历和修改 List
。
ListIterator
接口的主要方法包括(除了 Iterator
的方法外):
hasPrevious()
:判断是否存在上一个元素。previous()
:返回集合中的上一个元素,并将迭代器的游标向后移动一位。add(E e)
:将元素插入到列表中,紧跟在迭代器的当前位置之前。set(E e)
:用指定的元素替换通过next()
或previous()
返回的最后一个元素。nextIndex()
和previousIndex()
:分别返回对next()
和previous()
的下一个调用的索引。
2.1 特点
- 专用于
List
集合的遍历和修改。 - 既可以前向遍历也可以后向遍历。
- 允许在遍历过程中添加、替换和删除元素。
- 提供直接访问元素索引的方法。
3、Iterator 和 ListIterator 的区别
-
适用范围:
Iterator
:适用于任何实现了Collection
接口的集合。ListIterator
:专为List
集合设计,只能用于遍历和修改List
。
-
遍历方向:
Iterator
:只能前向遍历。ListIterator
:既可以前向遍历也可以后向遍历。
-
修改功能:
Iterator
:仅提供了删除当前元素的功能。ListIterator
:提供了添加、替换和删除元素的功能。
-
索引访问:
Iterator
:不提供直接访问元素索引的方法。ListIterator
:提供了直接访问元素索引的方法。
4、示例
4.1 使用 Iterator 遍历 Set
Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("C");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
4.2 使用 ListIterator 遍历 List 并修改
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
ListIterator<String> listIterator = list.iterator();
while (listIterator.hasNext()) {
String element = listIterator.next();
System.out.println(element);
// 假设我们想要替换第一个元素
if (listIterator.nextIndex() == 1) {
listIterator.set("X"); // 将 "B" 替换为 "X"
}
}
// 打印修改后的列表
for (String s : list) {
System.out.println(s); // 输出: A X C
}
5、总结
Iterator 和 ListIterator 都是在Java集合框架中用于遍历集合的重要工具。选择哪一个取决于你的具体需求:
1、如果你只需要遍历集合,并且不关心元素的索引或修改集合,那么 Iterator 就足够了;
2、如果你需要遍历 List 集合,并且希望在遍历过程中添加、替换或删除元素,那么 ListIterator 是更好的选择。
💖The End💖点点关注,收藏不迷路💖
|