Personally I always prefer to use while(i.hasNext()) with iterators. Is this really an improvement or just splitting hairs?

I find for(Iterator i = list.iterator(); i.hasNext(); Object o = i.next()) { ... } rather hard to read, though it has the advantage of not leaking the iterator variable into the parent scope, and there's no possibility of screwing up with an infinite loop if you forget to call i.next();