有一个问题,为什么不直接将hasNext(),next()方法放在Iterable接口中,其他类直接实现就可以了?
原因是有些集合类可能不止一种遍历方式,实现了Iterable的类可以再实现多个Iterator内部类,
例如LinkedList
中的ListItr
和DescendingIterator
两个内部类,就分别实现了双向遍历和逆序遍历。
通过返回不同的Iterator
实现不同的遍历方式,这样更加灵活。如果把两个接口合并,就没法返回不同的Iterator
实现类了。
public interface Iterator<E> { boolean hasNext(); E next(); }
public interface Iterable<T> { Iterator<T> iterator(); }