Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java HashMap的fail-fast行为_Java_Hashmap_Concurrentmodification - Fatal编程技术网

java HashMap的fail-fast行为

java HashMap的fail-fast行为,java,hashmap,concurrentmodification,Java,Hashmap,Concurrentmodification,我使用java.util.HashMap来了解快速失败的行为是什么 HashMap map = new HashMap(); map.put("jon", 10); map.put("sean", 11); map.put("jim", 12); map.put("stark", 13); map.put("vic", 14); Set keys = map.keySet(); for(Object k:keys) { System.out.println(map.get(k)); }

我使用
java.util.HashMap
来了解
快速失败的行为是什么

HashMap map = new HashMap();
map.put("jon", 10);
map.put("sean", 11);
map.put("jim", 12);
map.put("stark", 13);
map.put("vic", 14);
Set keys = map.keySet();
for(Object k:keys) {
    System.out.println(map.get(k));
}

for(Object k:keys) {
   String key =(String)k;
   if(key.equals("stark")) {
      map.remove(key);
    }
}

System.out.println("after modifn");
for(Object k:keys) {
    System.out.println(map.get(k));
}
我得到了结果

12
11
10
14
13
after modifn
12
11
10
14
我还尝试使用迭代器

Iterator<String> itr = keys.iterator();
while(itr.hasNext()) {
    String key = itr.next();
    if(key.equals("stark")) {
        map.remove(key);
    }
}
Iterator itr=keys.Iterator();
while(itr.hasNext()){
String key=itr.next();
if(键等于(“斯塔克”)){
地图。删除(键);
}
}
在这两种情况下我都没有得到任何
ConcurrentModificationException
。这是因为(来自javadoc)

迭代器的快速失效行为无法保证, 一般来说,不可能在未来做出任何硬保证 存在未同步的并发修改。快速失败 迭代器会尽最大努力抛出ConcurrentModificationException


我检查了另一个,其中说,它将抛出
ConcurrentModificationException
。您认为如何?

鉴于您显示的输出:

12
11
10
14
13   // notice this?
after modifn
12
11
10
14

由于13是最后一个键值对,因此当您通过
HashMap
迭代
,然后最终删除与
stark 13
对应的键值时,在修改
HashMap
之后,将停止
迭代
,因此,它不再
迭代
。因此,请不要使用ConcurrentModificationException。

尝试调用
clear()
而不是
remove()
。谢谢。我从未注意到..
if(key.equals(“jon”)
将引发异常。。