迭代器设计模式提供了一个能够顺序访问内部元素而不暴漏内部结构的遍历方法.
应用场景:1访问集合 而不想暴露内部结构时使用;
比如forEach就是一个简单的迭代器
2.对同一个集合,想要用多种遍历方式来遍历时使用迭代器:
因为迭代器内部会有一个Collertion<T> 来拷贝一份相同的集合,所以迭代器的遍历行为不会对原来的集合造成影响
3:迭代器的遍历开始时,不影响对原来的集合做读写操作
在多线程环境中,迭代器可以提供一种线程安全的方式来遍历聚合对象。
4.简化代码
使用迭代器可以简化代码,特别是在处理复杂的数据结构时,迭代器可以隐藏遍历的复杂性。
应用场景 1 ,3,4 是利用了迭代器的特点,要完成第2个应用场景需要能够自定义迭代器,只需要自定义一个迭代器类来实现Interator接口,覆写hasNext()方法和next()方法
public class CustomIterator<T> implements Iterator<T> {
private final T[] collection;
private int position = 0;
public CustomIterator(T[] collection) {
this.collection = collection;
}
@Override
public boolean hasNext() {
return position < collection.length;
}
@Override
public T next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
return collection[position++];
}
@Override
public void remove() {
if (position <= 0) {
throw new IllegalStateException("Cannot remove from this position");
}
// 实现删除逻辑
}
}