Consider the following code: final Collection items = ... final Iterator i = items.iterator(); while(i.hasNext()) { final Object item = i.next(); // Do something with each item // The code in question: i.remove(); } Now, add the specification that items is quite large in memory (~1 million items), the loop takes 5 minutes to execute, and after an item is used ...