迭代器模式的定义:它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。

通常迭代器会存在两个方法:

  1. 判断是否还有下一个元素
  2. 获取下一个元素
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());  
    }  
}

该模式的优点是为各种集合的遍历提供了通用的接口,客户端只需要与迭代器进行交互,而无需了解复杂的数据结构。