Is nulling and then later checking current for null an optimization? If so, it would seem to deoptimize the n successful hasNext calls for the sake of the one unsuccessful hasNext call that indicates the iterator is empty (okay, hasNext on an empty iterator could be called arbitrarily many times, but in practice most iterators are throw away after exhaustion).