4

LinkedList の Java 実装を調べていたところ、次のことがわかりました。

public class LinkedList<E> 
       extends AbstractSequentialList<E> implements List<E>,
               Deque<E>, Cloneable, java.io.Serializable

LinkedList が Deque インターフェイスをサポートする必要があるのはなぜですか? リンクされたリストの最後に要素を追加したいという要望は理解していますが、それらのメソッドは List インターフェイスに含まれている必要があります。

4

4 に答える 4

6

実装はLinkedListたまたま契約を満たしているDequeので、インターフェイスを実装しないのはなぜですか?

于 2011-05-05T10:27:35.707 に答える
4

JavaDocs が述べているように:

これらの操作により、リンクされたリストをスタック、キュー、または両端キューとして使用できます。

List インターフェイスは単なるリストです。つまり、追加または削除できます。したがって、List インターフェイスの基本的な実装では、ArrayList などの単純なメソッドを提供するだけで済みます。Deque インターフェイスは両端キューであり、iava の LinkedList IS-A 両端キューです。

于 2011-05-05T10:27:06.300 に答える
3

IIRC、のdeque略ですdouble end queue。あなたが言及する場合、ジェネリックを両端キューとして定義することは論理的ではありませんList。たとえば、anArrayListDequeインターフェイス用に設計されていません。挿入はリストの最後で効率的ですが、最初は絶対に効率的ではありません(配列全体の再割り当てが発生するためです)。

一方、これは二重リンクリストであるLinkedListため、インターフェイス用に完全に設計されています。Deque

于 2011-05-05T10:30:40.093 に答える
1

両端キューは 以外のものを使用して実装される可能性があり、LinkedListコードはそのような機能を備えたものに依存する可能性があるため、Dequeインターフェイスを個別に使用できるようにする必要があります。

ListDequeリストの先頭への追加/先頭からの削除は、すべての実装で (簡単に) サポートできるものではない可能性があるため、それ自体を実装/拡張しないでください。

于 2011-05-05T10:27:47.543 に答える