package unsafe;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorTest {
public static void main(String[] args) {
Collection<String> list = new ArrayList<String>();
list.add("张三");
list.add("李四");
list.add("王武");
iterator(list);
// for1(list);
}
private static void iterator(Collection<String> list){
Iterator<String> it = list.iterator();
while(it.hasNext()){
String s = it.next();
if("张三".equals(s)){
list.remove(s);
}else{
System.out.println(s);
}
}
}
private static void for1(Collection<String> list){
for(String s :list){
if("张三".equals(s)){
list.remove(s);
}else{
System.out.println(s);
}
}
}
}
运行结果
Exception in thread "main" java.util.ConcurrentModificationException at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372) at java.util.AbstractList$Itr.next(AbstractList.java:343) at unsafe.IteratorTest.for1(IteratorTest.java:32) at unsafe.IteratorTest.main(IteratorTest.java:16)
查看源码,定位到抛异常处.
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}