title: Iterator.hasNext() goes nuts after remove() from collection
body: <p>The code is pretty simple:</p>
  
  <pre><code>    List lst1 = new ArrayList(){{add("1");}};
      Iterator it = lst1.iterator();
      System.out.println(it.hasNext());
      it.next();
      System.out.println(it.hasNext());
      lst1.remove(0);
      System.out.println(it.hasNext());
  </code></pre>
  
  <p>I know that you should never remove from a collection while iterating through its iterator, please don't tell me that.</p>
  
  <p>Instead, please give me a sane explanation why would a remove() operation change the value returned by hasNext() from <em>false</em> to <em>true</em>:</p>
  
  <pre><code>$ /usr/lib/jvm/sun-jdk-1.6/bin/java -version
  java version "1.6.0_26"
  Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
  Java HotSpot(TM) Server VM (build 20.1-b02, mixed mode)
  
  true
  false
  true
  </code></pre>
  
  <p>hasNext() API documentation clearly states that it should return <em>true</em> ONLY if there are more elements in the iterator, and calling next() returns an element. The output proves that it's not the case with SUN JDK 1.6</p>
  
  <p>IBM JDK doesn't do that, hasNext returns <em>false</em> after remove() gets called:</p>
  
  <pre><code>$ /usr/lib/jvm/ibm-jdk-bin-1.6/bin/java -version
  java version "1.6.0"
  Java(TM) SE Runtime Environment (build pxi3260sr9fp2-20110625_01(SR9 FP2))
  IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 Linux x86-32 jvmxi3260sr9-20110624_85526 (JIT enabled, AOT enabled)
  
  true
  false
  false
  </code></pre>
  
  <p>Is there a bug in Sun/Oracle hasNext() method? Or, is there a bug in IBM hasNext() method? Or, should I just not bother with all that?</p>