迭代器
在 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集合框架。