| |
当对map 或者collection执行iterate时,通过遍历map或者collection应用程序接口(api)删除一个元素是非法的。如果你试着运行如下的代码:
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接口直接支持的唯一的修改方法
|
|