迭代器模式
文章目录
迭代器模式的定义:它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。
通常迭代器会存在两个方法:
- 判断是否还有下一个元素
- 获取下一个元素
classDiagram
class Iterator{
<<interface>>
+ next()
+ boolean hasNext()
}
class IterableCollection{
<<interface>>
+ Iterator getIterator()
}
class ConcreteIterator{
+ next()
+ boolean hasNext()
}
class ConcreteCollection{
+ Iterator getIterator()
}
IterableCollection ..> Iterator
ConcreteIterator ..|> Iterator
ConcreteCollection ..|> IterableCollection
实现代码 迭代器接口:
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());
}
}
该模式的优点是为各种集合的遍历提供了通用的接口,客户端只需要与迭代器进行交互,而无需了解复杂的数据结构。
文章作者 梧桐碎梦
上次更新 2023-05-07 13:34:36