使用iterator遍历集合中的元素时候,不能修改集合中的元素,否则会引发java.util.ConcurrentModificationException异常。这是因为Iterator使用快速失败机制,一旦检测到集合中的元素被修改,将引发ConcurrentModificationException异常。
这个异常在使用多线程时尤其得注意,一个线程访问迭代器中的元素,另外一个线程修改集合中的元素,这将引发上面的异常,这样避免了共享资源而引发的异常。
如果想修改集合中的元素,必须使用Iterator中的reomove方法。下面的代码演示了这一点注意事项。实现是正确删除的代码:
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class TestIterator {
public static void main(String[] args) {
Collection a = new HashSet();
a.add("first");
a.add("two");
a.add("three");
a.add("four");
Iterator iter = a.iterator();
while(iter.hasNext())
{
String temp=(String) iter.next();
System.out.println(temp);
if(temp.equals("two"))
{
iter.remove();
}
}
System.out.println(a);
}
}
下面是修改集合中的元素会引发异常,即错误代码:
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class TestIterator {
public static void main(String[] args) {
Collection a = new HashSet();
a.add("first");
a.add("two");
a.add("three");
a.add("four");
Iterator iter = a.iterator();
while(iter.hasNext())
{
String temp=(String) iter.next();
System.out.println(temp);
if(temp.equals("two"))
{
//使用集合删除元素时将出现错误
a.remove(temp);
}
}
System.out.println(a);
}
}