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

Java 迭代器模式詳解:統一遍歷介面與集合解耦

     編輯:Java 相關知識

模式定義與核心價值

迭代器模式提供一種方法順序訪問聚合對象中的各個元素,而又不暴露該對象的內部表示。其核心價值在於:將遍歷邏輯從集合類中分離出來,實現集合與遍歷行為的解耦。

四大核心角色

  • Iterator(迭代器介面):定義遍歷操作(hasNext、next、remove)
  • ConcreteIterator(具體迭代器):實現具體遍歷邏輯,維護游標位置
  • Aggregate(聚合介面):定義創建迭代器的工廠方法
  • ConcreteAggregate(具體聚合):實現創建對應迭代器

完整代碼實現

// 迭代器介面
interface Iterator<E> {
    boolean hasNext();
    E next();
    void remove(); // 可選操作
}

// 聚合介面
interface Container<E> {
    Iterator<E> iterator();
    void add(E e);
    void remove(E e);
    E get(int index);
}

// 具體聚合類
class ActualContainer<E> implements Container<E> {
    private List<E> list = new ArrayList<>();
    
    @Override
    public void add(E e) { list.add(e); }
    
    @Override
    public void remove(E e) { list.remove(e); }
    
    @Override
    public E get(int index) { 
        return (index >= 0 && index < list.size()) ? list.get(index) : null; 
    }
    
    @Override
    public Iterator<E> iterator() {
        return new ActualIterator();
    }
    
    // 內部類實現迭代器
    private class ActualIterator implements Iterator<E> {
        private int cursor = 0;
        
        @Override
        public boolean hasNext() {
            return cursor < list.size();
        }
        
        @Override
        public E next() {
            if (!hasNext()) throw new NoSuchElementException();
            return list.get(cursor++);
        }
        
        @Override
        public void remove() {
            if (cursor == 0) throw new IllegalStateException();
            list.remove(--cursor);
        }
    }
}

// 客戶端測試
public class Demo {
    public static void main(String[] args) {
        ActualContainer<Integer> container = new ActualContainer<>();
        for (int i = 5; i < 20; i++) container.add(i);
        
        Iterator<Integer> it = container.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

JDK 內建實現分析

Java 集合框架完美應用了迭代器模式:

  • Collection 繼承 Iterable,強制實現 iterator()
  • ArrayList 通過內部類 Itr 實現快速失效迭代器
  • HashMap 通過 EntryIterator 遍歷鍵值對

進階特性:快速失效 vs 安全失效

設計模式組合應用

Java 集合框架中,迭代器模式常與其他模式結合:

  • 工廠方法:iterator() 即工廠方法
  • 裝飾器:Collections.synchronizedList 包裝迭代器
  • 適配器:Enumeration 轉 Iterator

總結

迭代器模式是集合框架的基石,理解其原理有助於:正確使用 JDK 集合、避免 ConcurrentModificationException、設計自定義集合類、優化遍歷性能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性快速失效安全失效
代表ArrayList、HashMapCopyOnWriteArrayList、ConcurrentHashMap
原理modCount 機制檢測結構性修改遍歷時複製底層數據
併發性能低高(讀多寫少場景)
內存開銷小大