JAva集合【4】——iteratorとiterableの異同分析
一、iterator紹介
なぜiteratorインタフェースが必要ですか?
まず,
なぜ抽象が必要なのか.
もし
これにより,結合の程度が高く,使用するデータ構造が変化すると,既存のコードの維持に不利な書き方を変える.
二、iterableインタフェース
ソースコードは次のとおりです.
上記のソースコードから分かるように、
三、なぜIteratorにIterableが必要なのか
1.
この文章は自分(本菜鳥)の学習蓄積記録、または学習ノートのみを代表し、権利侵害があれば著者に連絡して削除してください.人には完璧な人がいないし、文章も同じで、文章は稚拙で、下では才能がないので、噴き出さないでください.もし間違いがあれば、指摘してください.感謝しています.
技術の道は一時的ではなく,山が高く水が長く,たとえゆっくりしていても,走り続けている.
公衆番号:秦懐雑貨店
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()
メソッドが付属している.集合Collection
、List
、Set
はすべて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
を取得して異なる操作を実行することができる.この文章は自分(本菜鳥)の学習蓄積記録、または学習ノートのみを代表し、権利侵害があれば著者に連絡して削除してください.人には完璧な人がいないし、文章も同じで、文章は稚拙で、下では才能がないので、噴き出さないでください.もし間違いがあれば、指摘してください.感謝しています.
技術の道は一時的ではなく,山が高く水が長く,たとえゆっくりしていても,走り続けている.
公衆番号:秦懐雑貨店