ArrayDeque and List

Jonas Konrad me at yawk.at
Sat Jun 30 19:53:25 UTC 2018


Hey,

The introduction of ArrayDeque in Java 1.6 has basically replaced 
LinkedList as the "default" implementation of java.util.Queue, which is 
probably for the best. However, from time to time, I still see use cases 
where a class that implements both Deque and List is wanted for ease of 
use. LinkedList is currently the only class that supports this. One 
example would be sorting the queue in-place.

Has there been any discussion on having ArrayDeque implement List?

There is no *technical* reason against doing so - the internal structure 
of ArrayDeque is fully capable of supporting an implementation of List, 
and there would be no additional fields needed that would change current 
memory behavior. The existing Deque interface would also remain unaffected.

I see two possible reasons against doing this:

- Added maintenance effort, a lot of it duplicated from ArrayList. This 
*could* be done gradually: ArrayDeque only extends AbstractCollection 
right now so implementations for e.g. subList could be inherited from 
AbstractList. Performance tweaking would be nice in many places though.
- Design - conceptually, a Deque is something very different from a 
List. LinkedList implementing both could be seen as a mistake from that 
point of view. When coding to interfaces, which is good practice anyway, 
this change isn't visible though.

Thoughts?

- Jonas Konrad


More information about the core-libs-dev mailing list