首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 迭代器模式全解析:從自定義介面到標準 Iterator 與 Foreach 語法整合

     編輯:Java 相關知識

迭代器模式將遍歷邏輯從聚合對象中分離,實現「遍歷行為與數據結構解耦」。本文遞進式演示:自定義迭代器介面 → 內部類/匿名類實現 → 對接 JDK Iterator → 實現 Iterable 支持 for-each → 多策略迭代器(如僅遍歷偶數索引)。

第一階段:自定義迭代器介面

public interface MyIterator<T> {
    boolean end();      // 是否到達末尾
    T current();        // 獲取當前元素
    void next();        // 移動到下一個
}

Links 內部類 LinksIterator 封裝 ArrayList 索引邏輯,browser() 工廠方法返回實例。

第二階段:匿名內部類簡化

Links2 直接在 browser() 中返回匿名實現,消除顯式內部類定義,代碼更緊湊。

第三階段:對接標準 java.util.Iterator

public Iterator<T> iterator() {
    return new Iterator<T>() {
        private int index = 0;
        public boolean hasNext() { return index < items.size(); }
        public T next() { return items.get(index++); }
        public void remove() { throw new UnsupportedOperationException(); }
    };
}

三大核心方法:hasNext()、next()、remove()。僅讀場景拋出 UnsupportedOperationException 即可。

第四階段:實現 Iterable 支持 Foreach

public class Links4<T> implements Iterable<T> {
    public Iterator<T> iterator() { ... } // 同上
}

// 客戶端
for (Integer i : links) { ... } // 編譯器自動轉換為 iterator() 調用

Iterable 僅要求提供 iterator(),是 Foreach 語法糖的契約。

第五階段:多策略迭代器

Links5 除默認 iterator() 外,額外提供 even() 返回 Iterable<T>,內部 next() 步長為 2:

for (Integer i : links.even()) { ... } // 僅輸出 1, 3, 5...

此模式允許同一聚合對象暴露多種遍歷視圖(逆序、過濾、分頁等),而不污染主迭代器邏輯。

設計原則總結

  1. 單一職責:聚合對象管數據,迭代器管遍歷。
  2. 開閉原則:新增遍歷策略只需新增 Iterable 實現,不修改原類。
  3. 標準優先:實現 java.util.Iterator + Iterable 即享受 Foreach、Stream API、第三方庫無縫互操作。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved