import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;public class IteratorTest {
public static void main(String[] args) {
Collection e=new HashSet();
    e.add("bubble sort");
    e.add("quick sort");
    e.add("insert sort");
    Iterator iter=e.iterator();
    while(iter.hasNext()){
     String algorithm=(String)iter.next();
     if(algorithm.equals("quick sort")){
     e.remove(algorithm);//改为e.remove(algorithm);就行,不改就报错
     }
     System.out.println();
    }
    System.out.println(e);
}
}
请高手解惑

解决方案 »

  1.   

    迭代器在遍历集合的时候是不允许修改集合中的内容的,应当调用迭代器中的移除方法去删除集合中的数据.public static void main(String[] args) {
    Collection e=new HashSet();
      e.add("bubble sort");
      e.add("quick sort");
      e.add("insert sort");
      Iterator iter=e.iterator();
      while(iter.hasNext()){
      String algorithm=iter.next().toString();
      if(algorithm.equals("quick sort")){
    //e.remove(algorithm);//改为e.remove(algorithm);就行,不改就报错
      iter.remove();
      }
      System.out.println();
      }
      System.out.println(e);
    }
      

  2.   

    e.remove(algorithm);-->iter.remove();
      

  3.   

    Iterator.remove() 方法会在删除当前迭代对象的同时维护指向原来对象的单链索引表的一致性。
      

  4.   

    楼主“改为e.remove(algorithm);就行,不改就报错”应该是“改为iter.remove();就行,不改就报错”吧。简单点说吧,e.remove(algorithm)调用的是HashMap的一个接口,而iter.remove()是HashMap内部类KeyIterator的一个接口。
    调用e.remove(algorithm)时,会修改modCount(HashMap的实例变量)的值,但不会同步expectedModCount(KeyIterator的实例变量)与modCount的值;而调用iter.remove()时,除了会修改modCount的值外,还会同步expectedModCount与modCount的值。
    而在调用iter.next()的时候会判断expectedModCount和modCount的值是否同步,如果不同步就会抛出异常。
    具体过程楼主可以参考jdk源码。