From :コレクション フレームワーク
「AbstractCollection クラスは、適切なサブクラスで実装される iterator() および size() メソッドを除く、すべてのメソッドの実装を提供します」
iterator() のデフォルトの動作がない理由を誰かが明確にすることができますか? この質問から、サイズ () がデフォルトではない理由がわかります。
From :コレクション フレームワーク
「AbstractCollection クラスは、適切なサブクラスで実装される iterator() および size() メソッドを除く、すべてのメソッドの実装を提供します」
iterator() のデフォルトの動作がない理由を誰かが明確にすることができますか? この質問から、サイズ () がデフォルトではない理由がわかります。
それは何をしますか?
iterator()
メソッドは、派生クラスが実際にデータを提供する方法です。
を実装するすべてのメソッドは、およびAbstractCollection
の実際の実装によって提供されるデータを使用して、適切なロジックを実行するだけです。size()
iterator()
はデータのAbstractCollection
保存方法を認識しないため、iterator()
実装には次の 2 つの選択肢があります。
UnsupportedOperationException
など、他の多くのメソッドと同じようにスローします。add
remove
最初の解決策のみが理にかなっています。コレクションは少なくとも読み取りを許可する必要がありますが、書き込みはオプションである場合があります。
3 つの異なるコレクションを考えてみましょう: 配列に基づくリスト、リンクされたリスト、そしてツリーに基づく並べ替えられたリストです。配列ベースのコレクションの反復子は、インデックス付けされた場所に基づいて各要素にアクセスするユーザーを知る必要があります。リンクされたリストの反復子は、要素間のリンクをトラバースする方法を知っている必要があります。また、ツリーベースのコレクションの反復子は、ツリーをトラバースする方法 (幅優先または深さ優先など) を知る必要があります。これらの動作はすべて非常に異なり、実装固有であることがわかります。