マップ(HashMap、HashTable、ConcurrentHashMap)を反復処理すると、特定のエントリを削除しようとすると、値。しかし、それはすべてのエントリで発生しません。マップ上で反復処理中に、すでに削除されていても値が出力される
public class Test {
public static void main(String[] args) {
ConcurrentHashMap<String, String> map = new ConcurrentHashMap<String, String>();
map.put("Pujan", "pujan");
map.put("Swati", "swati");
map.put("Manish", "manish");
map.put("Jayant", "pujan");
System.out.println(map);
for (String string : map.keySet()) {
System.out.println(string+","+map.get(string));
map.remove("Manish");
}
System.out.println(map);
}
}
出力:
{Jayant=pujan, Swati=swati, Manish=manish, Pujan=pujan}
Jayant,pujan
Swati,swati
Pujan,pujan
{Jayant=pujan, Swati=swati, Pujan=pujan}
??第Scenarion
//map.remove("Manish");
map.remove("Swati");
出力:
{Jayant=pujan, Swati=swati, Manish=manish, Pujan=pujan}
Jayant,pujan
**Swati,null**
Manish,manish
Pujan,pujan
{Jayant=pujan, Manish=manish, Pujan=pujan}
'map.remove'が' for'ループの中にあるのはなぜですか? – piyushj
あなたは 'Map.remove'を反復して使用することは決してありません。ほとんどの場合、並行変更例外が発生し、そうでなければ予期しない結果が発生します。 – RealSkeptic
@RealSkeptic - 彼はConcurrentHashMapを使用しています! –