迭代器模式的定义:它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。
通常迭代器会存在两个方法:
- 判断是否还有下一个元素
- 获取下一个元素
实现代码
迭代器接口:
public interface Iterator<E> {
boolean hasNext(); //判断是否还有下一个
E next(); //获取下一个
}
实现迭代器:
public class CustomList<E> {
@SuppressWarnings("unchecked") // 因为不能直接 new E[]。虽然使用强转会造成堆污染
private E[] elements = (E[]) new Object[16];
private int size = 0;
public void add(E element) {
elements[size++] = element;
}
// 获取该类实现的迭代器
public Iterator<E> iterator(){
return new CustomIterator();
}
private class CustomIterator implements Iterator<E> {
int current = 0;
@Override
public boolean hasNext() {
return current < size;
}
@Override
public E next() {
if (!hasNext()) {
return null;
}
return elements[current++];
}
}
}
CustomList<Integer> list=new CustomList<>();
list.add(2);
list.add(3);
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
该模式的优点是为各种集合的遍历提供了通用的接口,客户端只需要与迭代器进行交互,而无需了解复杂的数据结构。