動作がjava.util.HashMap
何であるかを学ぶために遊んでみました。fail-fast
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から)
一般的に言えば、同期されていない同時変更が存在する場合にハードな保証を行うことは不可能であるため、反復子のフェイルファスト動作は保証できません。フェイルファスト イテレーターは、ベスト エフォート ベースで ConcurrentModificationException をスローします。
私は言う別のスレッドをチェックしました、それはスローConcurrentModificationException
します..どう思いますか?