Path: csiph.com!x330-a1.tempe.blueboxinc.net!newsfeed.hal-mli.net!feeder3.hal-mli.net!nx02.iad01.newshosting.com!newshosting.com!news-out.readnews.com!transit3.readnews.com!postnews.google.com!news4.google.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Chris Riesbeck Newsgroups: comp.lang.java.programmer Subject: Re: looping through a list, starting at 1 Date: Tue, 02 Aug 2011 14:38:58 -0500 Lines: 58 Message-ID: <99r22jF3t1U1@mid.individual.net> References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-Trace: individual.net OU0cgqeyrLEraqY7JXcJZgKLOib8HOUeM83OVfe6mW8BOQicQi Cancel-Lock: sha1:Aqq30Dof8Y6CTOZVveUPdvfD3Kk= User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20110624 Thunderbird/5.0 In-Reply-To: Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:6760 On 8/1/2011 8:50 PM, Eric Sosman wrote: > On 8/1/2011 6:45 PM, Stefan Ram wrote: >> Assuming a list has a sufficient number of entries at run >> time, what should be prefered to assign a reference to each >> entry to ģeĢ, starting at index 1: >> >> for( final E e : l.sublist( 1, l.size() ))... >> >> or >> >> for( int i = 1; i< l.size(); ++i ){ final E e = l.get( 0 ); ... } > > (ITYM l.get(i)?) > > How about > > Iterator it = l.iterator(); > it.next(); // ignore element 0 > while (it.hasNext()) { > E e = it.next(); > ... > } > > In short, there may well be half-a-dozen ways to do what you ask, > if not more. None of them stands out as "preferred" to my eye; > you may as well do whatever seems natural. To add yet another option, if you are writing lots of iterations over the "tail" of a collection, then you could define an Iterable wrapping class, like this: public class Tail implements Iterable { public static Tail tail(final Iterable coll) { return new Tail(coll); } public Iterator iterator() { return iter; } private Iterator iter; private Tail(final Iterable coll) { iter = coll.iterator(); if (iter.hasNext()) iter.next(); } } then to use import static utils.Tail.tail; ... for (final E e : tail( list )) { ... }