概述
接口Iterator 爲外部迭代器,通過觀察任何一個集合框架的UML類圖,很容易發現它們都間接繼承了這個接口。下面只展示一個集合框架的類圖
Iterator支持對容器中的元素進行遍歷和移除,還支持流式遍歷
外部迭代器的特點是:可拔插,其迭代行爲可以掛載到待比較對象的外部,此外,外部迭代器往往用來支撐內部迭代器的實現
應區別於內部迭代器Iterable
應區別於枚舉器Enumeration
對容器中的元素進行遍歷和移除的實現的機制 在於子類中的內部類itr
private class Itr implements Iterator<E>
結合源碼很容易看出 Iterator和Itr的設計滿足 二十三種設計模式中的 “工廠方法”模式
Iterator是工廠方法 Itr是具體產品
下面來看看 Iterator和Itr的源碼
Iterator接口
package java.util;
import java.util.function.Consumer;
public interface Iterator<E> {
// 是否存在未遍歷元素
boolean hasNext();
// 返回下一個元素
E next();
// 移除一個元素
default void remove() {
throw new UnsupportedOperationException("remove");
}
// 流式遍歷。遍歷每個元素,並對其執行相應的擇取操作
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while(hasNext()) {
action.accept(next());
}
}
}
接口是比較容易理解的 難點在於聯繫實現的內部類
Itr實現內部類
這個與相應的集合框架的具體實現聯繫在一起比較好(原因是與具體的場景結合比較緊密) 後面介紹具體的集合框架的時候 這裏會貼上鍊接。