# 迭代器模式
1.简介
迭代器是一种行为设计模式,它可以让你在不暴露集合底层表现形式的情况下遍历集合中的所有元素。
举个例子假如说我们现在有一个 ArrayList
和一个 LinkedList
,如何去遍历集合相信大家都很清楚(fori循环、get(i)输出)。但编写这段代码的前提是我们需要知晓这两个容器的访问方式和内部结构。如果我们现在突然换成比较冷门的比如 HashSet
,那么你该如何遍历,它根本没有提供 get()方法,你这个时候还需要去研究相关的api和内部结构。
但是如果使用迭代器呢?只要它实现了 iterable
接口,无论什么数据结构,也不管你没听过或是没见过,都可以用类似、固定的方式去遍历。
这其实也是上面所说的意思,开发者不需要知道如何去遍历的细节,只需要用类似的遍历方法就好。
2.UML图
- 迭代器(Iterator): 接口声明了遍历集合所需的操作:获取下一个元素、获取当前位置和重新开始迭代等。
- 具体迭代器(Concrete Iterators): 实现遍历集合的一种特定算法。迭代器对象必须跟踪自身遍历的进度。可以使多个迭代器相互独立的遍历同一个集合
- 集合(iterable): 接口声明一个或多个方法来获取与集合兼容的迭代器。返回的方法类型必须被声明为迭代器接口。
- 具体集合(Concrete Iterable): 会在客户端请求迭代器时返回一个特定的具体迭代器类实体。
3、代码示例
Java
中其实已经默认实现了迭代器模式的接口。主要涉及以下两个接口:
package java.util;
import java.util.function.Consumer;
public interface Iterator {
boolean hasNext();
E next();
default void remove() {
throw new UnsupportedOperationException("remove");
}
default void forEachRemaining(Consumer