【JDK源碼剖析】Iterator--外部迭代器接口 Itr--實現內部類

概述

接口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實現內部類

這個與相應的集合框架的具體實現聯繫在一起比較好(原因是與具體的場景結合比較緊密) 後面介紹具體的集合框架的時候 這裏會貼上鍊接。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章