You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by Phil Weighill-Smith <ph...@volantis.com> on 2005/02/28 12:33:44 UTC

RE: Massively OT, 'Closures in Java' [was Re: AW: [Patch] modifiedselector, style, remove unused code, slightly more lazy DigestAlgorithm.getValue (now with added source code -doh!)]

If you want to iterate through a List that has an unspecified
implementation (at the point of iteration) always use an iterator; this
is the only way to implement performant code without making assumptions
about the implementation of the list.

Phil :n.

On Mon, 2005-02-28 at 11:30, Jose Alberto Fernandez wrote:

> I do not think so, from LinkedList implementation:
> 
>     /**
>      * Return the indexed entry.
>      */
>     private Entry entry(int index) {
>         if (index < 0 || index >= size)
>             throw new IndexOutOfBoundsException("Index: "+index+
>                                                 ", Size: "+size);
>         Entry e = header;
>         if (index < size/2) {
>             for (int i = 0; i <= index; i++)
>                 e = e.next;
>         } else {
>             for (int i = size; i > index; i--)
>                 e = e.previous;
>         }
>         return e;
>     }
> 
> It will iterate on every call.
> 
> Enough of this, as I think it is becoming a little out of subject for
> the ANT list :-)
> 
> Jose Alberto
> 
> > -----Original Message-----
> > From: Kev Jackson [mailto:kevin.jackson@it.fts-vn.com] 
> > Sent: 28 February 2005 11:19
> > To: Ant Developers List
> > Subject: Re: Massively OT, 'Closures in Java' [was Re: AW: 
> > [Patch] modifiedselector, style, remove unused code, slightly 
> > more lazy DigestAlgorithm.getValue (now with added source code -doh!)]
> > 
> > 
> > Jose Alberto Fernandez wrote:
> > 
> > >AFAIU, LinkedList.get(N) requires traversing the list to 
> > position N on 
> > >every call [O(n^2)], so usage of an iteratoe is much cheaper on this 
> > >case as there is no array behind the scenes.
> > >
> > >Jose Alberto
> > >  
> > >
> > I've just worked out why it's ok to do it this way (with 
> > respect to my 
> > particular use-case).  Basically I *want* to traverse the 
> > entire list, 
> > I'm not trying to pick out any particular position in the list (yes 
> > truly expensive using LinkedList.get(i)).  In my method I simply call 
> > get(i) from 0..List.size():
> > 
> > from docs
> > <quote>Operations that index into the list will traverse the 
> > list from 
> > the begining or the end, whichever is closer to the specified 
> > index.</quote>
> > 
> > So as I'm asking for position 0, the traversal starts at the 
> > head of the 
> > list, then I simply walk the list with the loop calling get(i), which 
> > also happens to be the next element in the list from where the list 
> > cursor currently is (ListIterator interface docs).  Serendipity I 
> > suppose, but my usage is the most efficient for LinkedLists and also 
> > happens to be performant with ArrayLists, to do the 
> > particular traversal 
> > that I'm doing.
> > 
> > Kev
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
> > For additional commands, e-mail: dev-help@ant.apache.org
> > 
> > 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
> For additional commands, e-mail: dev-help@ant.apache.org

-- 
Phil Weighill-Smith <ph...@volantis.com>
Volantis Systems