當我迭代map(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! –