12

Joshua Bloch の著書『Effective Java』では、クラスが内部動作へのフックとして「慎重に選択された保護されたメソッド」を提供する方法についての議論があります。
次に、著者は次のドキュメントを引用しますAbstractList.removeRange()

このメソッドはclear、このリストとそのサブリストに対する操作によって呼び出されます。リスト実装の内部を利用するためにこのメソッドをオーバーライドすると、clearこのリストとそのサブリストに対する操作のパフォーマンスが大幅に向上します。

私の質問は、このメソッドをオーバーライドすると、パフォーマンスがどのように改善されるのでしょうか (単純にオーバーライドしないだけではありません)。誰でもこれの例を挙げることができますか?

4

3 に答える 3

11

メソッドの javadocs で指定されているとおり:

この実装は、fromIndex の前に配置されたリスト反復子を取得し、範囲全体が削除されるまで、ListIterator.next に続いて ListIterator.remove を繰り返し呼び出します。

この抽象クラスはそのサブクラスの内部構造を認識していないため、削除されるアイテムの数に比例して時間内に実行されるこの汎用アルゴリズムに依存しています。

たとえば、要素を連結リストとして格納するサブクラスを実装したとします。次に、この事実を利用して、このメソッドをオーバーライドして、一定時間で実行されるリンク リスト固有のアルゴリズム (ポインターをfromIndexに移動する) を使用できます。toIndex内部を利用したため、このようにパフォーマンスが向上しました。

于 2013-03-12T03:00:37.157 に答える