On 02/07/2014 12:59 PM, Martin Buchholz wrote:
Sorry we're all such lamers.

??

ArrayDeque should implement most of the methods in List, notably get(i).

ArrayDeque should not actually implement List itself, because the change
in contract/behavior for hashCode/equals would be too great.

Extending ArrayList to implement Deque might avoid this? Though I suppose the chance of exciting new conflicts "in the wild" is higher given that ArrayList has been around since 1.2.

But we can provide a List asList() method.

If this path is chosen, it could be perhaps interesting to have ArrayList and ArrayDeque act as mutual views for each other, though I'd hate to require the extra object when (as LinkedList shows) it is conceptually OK to implement List and Deque.

If we have agreement, we can do the relatively easy implementation.


On Fri, Feb 7, 2014 at 10:07 AM, David M. Lloyd <david.ll...@redhat.com
<mailto:david.ll...@redhat.com>> wrote:

    Just want to say that we've also had the need to implement an
    array-backed Deque+List; we found no surprises implementing it and
    thus I believe that extending ArrayDeque to implement List would be
    a positive change.  Failing that, a combined ArrayListAndDeque class
    seems like a good idea.

    I think that calling it "Masters' thesis" material is perhaps
    overblowing the complexity a bit though. ;)  Given that the basic
    algorithmic complexity of ArrayList is well-understood and is
    well-suited to many (some would say "most") applications, going for
    a O(sqrt(N)) middle insert/remove complexity would be something I
    would consider "scope creep"; LinkedList is usually a fine choice
    for these cases.


    On 02/07/2014 11:44 AM, Dan Smith wrote:

        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
        <https://bugs.openjdk.java.net/browse/JDK-8033158>
        [2] http://en.wikipedia.org/wiki/__Deque#Language_support
        <http://en.wikipedia.org/wiki/Deque#Language_support>
        [3] https://www.google.com/#q=__arraydeque+%22random+access%22
        <https://www.google.com/#q=arraydeque+%22random+access%22>
        [4] https://bugs.openjdk.java.net/__browse/JDK-6368844
        <https://bugs.openjdk.java.net/browse/JDK-6368844>
        [5]
        
http://mail.openjdk.java.net/__pipermail/core-libs-dev/2010-__April/004038.html
        
<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
        
<http://mail.openjdk.java.net/pipermail/core-libs-dev/2010-April/004031.html>



    --
    - DML




--
- DML

Reply via email to