在Java中,迭代器模式是一种常用的设计模式,用于遍历容器对象中的元素,而不暴露容器对象的内部结构。该模式将迭代逻辑封装在迭代器中,允许客户端透明地遍历容器对象中的元素,而不必了解容器对象的内部实现。
下面是一个简单的例子,展示如何使用迭代器模式来遍历一个列表中的元素:
首先,定义一个包含 Iterator 接口的容器 List 和一个具体的容器 ArrayList,并实现 Iterator 接口:
import java.util.ArrayList;
interface Iterator<T> {
boolean hasNext();
T next();
}
interface List<T> {
void add(T item);
Iterator<T> iterator();
}
class ArrayList<T> implements List<T> {
private java.util.ArrayList<T> arrayList = new java.util.ArrayList<>();
public void add(T item) {
arrayList.add(item);
}
public Iterator<T> iterator() {
return new ArrayListIterator<>(arrayList);
}
}
class ArrayListIterator<T> implements Iterator<T> {
private int index = 0;
private java.util.ArrayList<T> arrayList;
public ArrayListIterator(java.util.ArrayList<T> arrayList) {
this.arrayList = arrayList;
}
public boolean hasNext() {
return index < arrayList.size();
}
public T next() {
if (!hasNext()) {
throw new RuntimeException("No more elements");
}
return arrayList.get(index++);
}
}
然后,创建一个 Main 类来测试容器和迭代器的功能:
class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("niuniu");
list.add("junjie");
list.add("keshen");
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
在这个例子中,我们创建了一个 ArrayList 类来实现 List 接口,同时创建了一个 ArrayListIterator 类来实现 Iterator 接口,以实现对容器中元素的遍历。
在 Main 类中,我们首先创建了一个 ArrayList 对象,并使用 add 方法向其中添加了三个元素。然后,我们通过 iterator 方法获得了一个迭代器,并使用 hasNext 和 next 方法来遍历容器中的元素。最终,输出结果为:
niuniu
junjie
keshen
这表明我们成功地使用迭代器模式遍历了列表中的元素,并且没有直接暴露列表对象的内部结构。