I was looking at the java implementation of LinkedList, and found this:
public class LinkedList<E>
extends AbstractSequentialList<E> implements List<E>,
Deque<E>, Cloneable, java.io.Serializable
Why should a LinkedList support the Deque interface? I understand the desire to add elements to the end of the linked list, but those methods should have been incuded in the List interface.
The
LinkedList
implementation happens to to satisfy theDeque
contract, so why not make it implement the interface?IIRC,
deque
stands fordouble end queue
. In the case you mention, it's not logical to define a genericList
as a deque. For instance, anArrayList
is not designed for theDeque
interface. Insertions will be efficient in the end of the list, but absolutely not at its beginning (because it will cause the re-allocation of a whole array, I think).The
LinkedList
is, on the other end, perfectly designed for theDeque
interface, as it is a double linked list.As the JavaDocs states:
These operations allow linked lists to be used as a stack, queue, or double-ended queue.
The List interface is just a List i.e. you can add or remove. So a basic implementation of the List interface has to just provide those simple methods e.g. ArrayList. The Deque interface is the double ended Queue and iava's LinkedList IS-A Double Ended Queue.
Because a double-ended queue might be implemented using something other than a
LinkedList
and one's code may depend on anything with such functionality, so theDeque
interface needs to be available separately.List
should not itself implement/extendDeque
because adding to/removing from the start of a list may not be something that can be (easily) supported by every implementation.