Iterator Pattern迭代器模式:
首先了解两个接口:
1. Iterable接口:实现该接口的集合对象是可迭代遍历的
public interface Iterable<T> {
...
Iterator<T> iterator();
}
2.Iterator接口:迭代器
public interface Iterator<E> {
boolean hasNext();
E next();
void remove();
}
使用方法:
Iterator pattern :让自己的集合类实现Iterable 接口,并实现自己的独特Iterator 迭代器(hasNext, next, remove) ,允许客户端利用这个迭代器进行显式或隐式的迭代遍历:
Iterator<E> iter = collection.iterator();
while(iter.hasNext()) { … }或for (E e : collection) { … }
示例代码:
public class Pair<E> implements Iterable<E> {
private final E first, second;
public Pair(E f, E s) { first = f; second = s; }
@Override
public Iterator<E> iterator() {
return new PairIterator();
}
private class PairIterator implements Iterator<E> {
private boolean seenFirst = false, seenSecond = false;
@Override
public boolean hasNext() { return !seenSecond; }
@Override
public E next() {
if (!seenFirst) { seenFirst = true; return first; }
if (!seenSecond) { seenSecond = true; return second; }
throw new NoSuchElementException();
}
@Override
public void remove() {
throw new UnsupportedOperationException(); } }}即要有两个类分别实现Iterable和Iterator接口,前者重写public Iterator<E> iterator()函数,后者重写next(),hasNext(),remove()函数。