我玩过java.util.HashMap
以了解fail-fast
行为是什么。java快速行为失败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);
}
}
我没有在任何情况下,任何ConcurrentModificationException
..是这个尝试,因为(从的javadoc)
itera的故障快速行为tor不能保证,因为一般来说,不可能在 存在非同步并发修改中做出任何硬性保证。快速失败的迭代器 抛出ConcurrentModificationException一个尽力而为的原则
我检查另一thread它说,它会抛出ConcurrentModificationException
你觉得..what吗?
尝试调用'clear()'而不是'remove()'。 – Bringer128