import java.util.*; public class TestIterator { static public void main(String[ ] strs) { HashMap map = new HashMap( ); map.put("one", "1"); map.put("two", "2"); map.put("three", "3"); Iterator iterator = map.keySet( ).iterator( ); Object obj = iterator.next( ); obj = iterator.next( ); map.remove(obj); obj = iterator.hasNext( ); } }
就会抛出如下异常:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.next(HashMap.java:736)
at TestIterator.main(TestIterator.java:14)
remove 方法使iterator无效,并且当在下一次对iteration操作的时候,异常就会抛出。仔细检查iterator的API,以便正确地从iterator中移走当前值。可对前面的例子做如下修改:
map.remove(obj);
把上行换为:
iterator.remove(obj);
任何对map的改变都会使iterator无效,remove 是iterator接口直接支持的唯一的修改方法。