12

JavaLinkedListArrayList拡張AbstractListするのはなぜですか?

抽象クラスは、実装クラスで共通の動作を指定する場合に使用されます。

ただし、にあるすべてのメソッドはandAbstractListによってオーバーライドされます。ArrayListLinkedList

では、このクラスを拡張することの用途は何ですか?

4

4 に答える 4

5

ここから回答を得ることができます,,, AbstractList

このクラスは、「ランダム アクセス」データ ストア (配列など) によってサポートされるこのインターフェイスを実装するために必要な労力を最小限に抑えるために、List インターフェイスのスケルトン実装を提供します。シーケンシャル アクセス データ (リンクされたリストなど) の場合、このクラスよりも AbstractSequentialList を使用する必要があります。変更不可能な List を実装するには、プログラマはこのクラスを拡張し、get(int index) および size() メソッドの実装を提供するだけで済みます。

変更可能なリストを実装するには、プログラマはさらに set(int index, Object element) メソッドをオーバーライドする必要があります (それ以外の場合は UnsupportedOperationException がスローされます。List が可変サイズの場合、プログラマは add(int index, Object element) メソッドをさらにオーバーライドする必要があります)。 remove(int インデックス) メソッド。

Collection インターフェイス仕様の推奨に従って、プログラマは通常、void (引数なし) と Collection コンストラクターを提供する必要があります。

他の抽象 Collection 実装とは異なり、プログラマは Iterator 実装を提供する必要はありません。iterator と listIterator は、このクラスによって実装され、「ランダム アクセス」メソッドの上に、get(int インデックス)、set(int インデックス、Object 要素)、set(int インデックス、Object 要素)、add(int インデックス、Object 要素) が実装されます。 ) および remove(int インデックス)。

このクラスの各非抽象メソッドのドキュメントでは、その実装について詳しく説明しています。実装されている Collection がより効率的な実装を許可する場合、これらの各メソッドはオーバーライドされる可能性があります。

于 2013-08-23T05:27:28.083 に答える