迭代器
在 Java 中,迭代器是用于遍历集合(如 List、Set、Map 等)元素的工具。以下是几种常见的迭代器:
1. Iterator 接口
- 介绍:
Iterator是 Java 集合框架中最基础的迭代器接口,位于java.util包下。它提供了基本的遍历和删除元素的功能,所有实现Collection接口的集合类都可以通过iterator()方法获取Iterator对象。 - 常用方法: hasNext():判断集合中是否还有下一个元素。next():返回集合中的下一个元素。remove():移除迭代器最后返回的元素,该方法必须在每次调用 next() 方法之后调用一次。
- 示例代码:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorExample {
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("apple");
collection.add("banana");
collection.add("cherry");
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
if (element.equals("banana")) {
iterator.remove();
}
}
System.out.println(collection);
}
}
2. ListIterator 接口
- 介绍:
ListIterator是Iterator的子接口,专门用于遍历List集合。它在Iterator的基础上增加了向前遍历、添加元素和修改元素的功能。 - 常用方法: hasPrevious():判断集合中是否还有前一个元素。previous():返回集合中的前一个元素。add(E e):在当前位置插入一个元素。set(E e):修改迭代器最后返回的元素。
- 示例代码:
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
ListIterator<String> listIterator = list.listIterator();
while (listIterator.hasNext()) {
String element = listIterator.next();
System.out.println(element);
if (element.equals("banana")) {
listIterator.set("grape");
}
}
System.out.println(list);
while (listIterator.hasPrevious()) {
String element = listIterator.previous();
System.out.println(element);
}
}
}
3. Enumeration 接口
- 介绍:
Enumeration是 Java 早期用于遍历集合的接口,在 Java 集合框架出现之前就已经存在。它主要用于遍历Vector、Hashtable等旧的集合类。 - 常用方法: hasMoreElements():判断集合中是否还有更多元素。nextElement():返回集合中的下一个元素。
- 示例代码:
import java.util.Enumeration;
import java.util.Vector;
public class EnumerationExample {
public static void main(String[] args) {
Vector<String> vector = new Vector<>();
vector.add("apple");
vector.add("banana");
vector.add("cherry");
Enumeration<String> enumeration = vector.elements();
while (enumeration.hasMoreElements()) {
String element = enumeration.nextElement();
System.out.println(element);
}
}
}
4. Spliterator 接口
- 介绍:
Spliterator是 Java 8 引入的一个新接口,用于支持并行遍历和分割集合元素。它可以将一个集合分割成多个部分,每个部分可以由不同的线程并行处理,从而提高遍历效率。 - 常用方法: tryAdvance(Consumer<? super T> action):对集合中的下一个元素执行指定的操作。forEachRemaining(Consumer<? super T> action):对集合中剩余的所有元素执行指定的操作。trySplit():尝试将集合分割成两部分,并返回一个新的 Spliterator 对象。
- 示例代码:
import java.util.ArrayList;
import java.util.Spliterator;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
public class SpliteratorExample {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
Spliterator<String> spliterator = list.spliterator();
Stream<String> stream = StreamSupport.stream(spliterator, false);
stream.forEach(System.out::println);
}
}
总结
Iterator是最基础的迭代器,适用于所有实现Collection接口的集合类。ListIterator是Iterator的扩展,专门用于List集合,支持双向遍历和元素修改。Enumeration是 Java 早期的迭代器,主要用于旧的集合类。Spliterator是 Java 8 引入的迭代器,支持并行遍历和分割集合元素。
Java集合框架 文章被收录于专栏
Java集合框架是Java提供的一组用于存储和操作数据的类和接口,它位于java.util包中,为开发者提供了强大且灵活的数据存储和处理能力。以下将从整体架构、主要接口、常用实现类、使用场景以及示例代码等方面详细介绍Java集合框架。

