Random access in ArrayDeque

Dan Smith daniel.smith at oracle.com
Fri Feb 7 17:44:05 UTC 2014


I noticed recently that the javac scanner is making use of ArrayList.remove(0) when it consumes a buffer.  Obviously this is an inefficient way to implement a buffer, so I thought I'd try to fix it [1].  ArrayDeque seems to provide just the behavior I need, with one fatal flaw: despite encoding its data with an array, the class exposes no random-access operations.  For lookahead, I need to be able to call get(int).

This seems to be a fairly common complaint [2][3].

I found an old bug requesting that ArrayDeque be enhanced to implement List [4], as well as a thread from 2010 that included a proof-of-concept ArrayDeque+List [5] and had a note from Martin Buchholz saying he regrets that ArrayDeque doesn't already implement List [6].

Is there any hope of ArrayDeque being enhanced in the near future to provide random access?  There's some risk that any such initiative would be derailed by a quest for an uber-collection.  I think a lot of people would be quite happy just to have a (trivial) 'get(int)' method added to ArrayDeque.

—Dan

[1] https://bugs.openjdk.java.net/browse/JDK-8033158
[2] http://en.wikipedia.org/wiki/Deque#Language_support
[3] https://www.google.com/#q=arraydeque+%22random+access%22
[4] https://bugs.openjdk.java.net/browse/JDK-6368844
[5] http://mail.openjdk.java.net/pipermail/core-libs-dev/2010-April/004038.html
[6] http://mail.openjdk.java.net/pipermail/core-libs-dev/2010-April/004031.html


More information about the core-libs-dev mailing list