JAva集合【4】——iteratorとiterableの異同分析


一、iterator紹介iteratorインタフェースは、集合大家族の一員でもある.他のMapおよびCollectionインタフェースとは異なり、iteratorは主にコレクション内のすべての要素を容易に遍歴するために使用され、コレクション内の要素に反復アクセスするために使用され、遍歴要素を定義した仕様に相当するが、他のMapおよびCollectionインタフェースは主にストレージ要素を定義した仕様である.
boolean hasNext(); //         

E next();   //        

//     
default void remove() {
        throw new UnsupportedOperationException("remove");
    }
    
//             ,action       ,       
default void forEachRemaining(Consumer super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }

なぜiteratorインタフェースが必要ですか?
まず,iteratorインタフェースは遍歴集合の規範を定義するためであり,抽象でもあり,異なる集合での遍歴方式を抽象化することで,遍歴時に異なる集合の内部構造を知る必要がないことを知っている.
なぜ抽象が必要なのか.
もしiteratorインタフェースがないとしたら、遍歴するときはインデックスしか通過できないことを知っています.例えば、
for(int i=0;i

これにより,結合の程度が高く,使用するデータ構造が変化すると,既存のコードの維持に不利な書き方を変える.iteratorがなければ、クライアントはポインタを維持する必要があり、権限を下放することに相当し、ある程度の混乱をもたらす.抽象は遍歴機能を抽出し、iterator処理に渡し、クライアントが集合を処理するとき、より「専門」なそれに渡す、it do it well.
二、iterableインタフェースiterableインタフェースはjava集合大家族の最上位のインタフェースの一つであり、このインタフェースを実現することは、反復器を取得する能力を持っていると見なすことができる.IterableインタフェースはJDK 1.5に現れ、その時はiterator()メソッドのみであり、主に反復集合内の要素の仕様を定義している.字面の意味から見ると、反復可能なインタフェースを指す.
ソースコードは次のとおりです.
//          T      (JDK1.5      )
Iterator iterator();

//       ,action     ,            (JDK1.8  )
default void forEach(Consumer super T> action) {}

//              (JDK1.8  ),                       ,      cpu     ,    。
default Spliterator spliterator() {
    return Spliterators.spliteratorUnknownSize(iterator(), 0);
}

上記のソースコードから分かるように、iterableインタフェースは主にiteratorを取得するために、foreach()メソッドが付属している.集合CollectionListSetはすべてIterableの実装クラスであり、それらとそれらのサブクラスはforeachを使用して反復することができる.
三、なぜIteratorにIterableが必要なのかIteratorにはすでに集合要素を処理する方法がたくさんあるのを見ましたが、なぜ抽象的な層が必要なのでしょうか.多くの集合はIteratorインタフェースを直接実現するのではなく、Iterableを実現する.
1.Iteratorインタフェースのコアメソッドnext()やhashNext(),previous()などは,ポインタ,すなわち反復の現在の位置に大きく依存する.CollectionがIteratorインタフェースを直接実装すると,集合オブジェクトはポインタの能力を持ち,内部で異なる方法で伝達され,next()メソッドが互いに妨害される.反復位置が1つしかなく,互いに干渉している.2.Iterable反復器を取得するたびに、他の反復器と相互に影響しない最初から返されます.3.このように解結合の一種でもあり、一部の集合は1つのIterator内部クラスだけでなく、2つの可能性があり、例えばArrayList,LinkedListであり、異なるIteratorを取得して異なる操作を実行することができる.
この文章は自分(本菜鳥)の学習蓄積記録、または学習ノートのみを代表し、権利侵害があれば著者に連絡して削除してください.人には完璧な人がいないし、文章も同じで、文章は稚拙で、下では才能がないので、噴き出さないでください.もし間違いがあれば、指摘してください.感謝しています.
技術の道は一時的ではなく,山が高く水が長く,たとえゆっくりしていても,走り続けている.
公衆番号:秦懐雑貨店