title: Why iterator.remove does not throw ConcurrentModificationException
body: <p>What does <code>iterator.remove()</code> do differently from <code>list.remove()</code>, so that iterator does not throw an exception and <code>list.remove()</code> does throw one? In the end, both are modifying the collection size.</p>
  
  <p>Please ignore multi-threading here. I am just talking about a for-each loop and an iterator loop. As far as I know, a for-each loop creates an iterator only internally.</p>
  
  <p>I am confused.</p>