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);
}
}
请高手解惑
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);
}
}
请高手解惑
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);
}
调用e.remove(algorithm)时,会修改modCount(HashMap的实例变量)的值,但不会同步expectedModCount(KeyIterator的实例变量)与modCount的值;而调用iter.remove()时,除了会修改modCount的值外,还会同步expectedModCount与modCount的值。
而在调用iter.next()的时候会判断expectedModCount和modCount的值是否同步,如果不同步就会抛出异常。
具体过程楼主可以参考jdk源码。