JDKソースコード解析イテレータパターンは、JAVAの多くのコレクションで広く使用されています。次に、JAVAソースコードでイテレータパターンがどのように使用されているかを見てみましょう。

JDKソースコード分析

イテレータパターンはJAVAの多くのコレクションで広く使用されているので、JAVAソースコードでイテレータパターンを使用する方法を見てみましょう。

このコードを読んだ後、それは非常によく知られていますか?それは基本的に上記のコードに似ています。単一列のコレクションはイテレータを使用します。例としてArrayListを使用して説明します。

  • リスト:抽象集約クラス
  • ArrayList:具象集計クラス
  • イテレータ:抽象イテレータ
  • list.iterator():返されるのは、Iterator インターフェイスを実装する具象イテレータオブジェクトです。 

ArrayListのコード実装を具体的に見てみましょう


public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
    
    public Iterator<E> iterator() {
        return new Itr();
    }
    
    private class Itr implements Iterator<E> {
        int cursor;       // 下一个要返回元素的索引
        int lastRet = -1; // 上一个返回元素的索引
        int expectedModCount = modCount;
​
        Itr() {}
        
        //判断是否还有元素
        public boolean hasNext() {
            return cursor != size;
        }
​
        //获取下一个元素
        public E next() {
            checkForComodification();
            int i = cursor;
            if (i >= size)
                throw new NoSuchElementException();
            Object[] elementData = ArrayList.this.elementData;
            if (i >= elementData.length)
                throw new ConcurrentModificationException();
            cursor = i + 1;
            return (E) elementData[lastRet = i];
        }
        ...
}

コードのこの部分は比較的単純で、iterator メソッドでインスタンス化されたIterator オブジェクトを大まかに 返します Itrは、Iterator インターフェイスを実装し、その中の抽象メソッドを書き換える内部クラスです 

注意:

JAVAで開発しているときに、イテレータモードを使用する場合は、

独自に定義したコンテナクラスにjava.util.Iterableそのiterator()メソッドを実装して実装させるだけです

java.util.Iterator 実装クラスを返すようにする だけです。

おすすめ

転載: blog.csdn.net/qq_39368007/article/details/114236049