假设您有HashMap m
并且里面已经有一个键值对<"key1", object>
。
m.put("newkey", m.remove("key1"))
你会得到ConcurrentModificationException
吗?
答案 0 :(得分:7)
只要它不在遍历hashMap条目的循环体中,就可以这样做。可行的方法是remove操作将在put操作之前执行并完成,因此它在语义上等同于在2行中执行它。
答案 1 :(得分:1)
刚刚为你测试过。
Map<String, Object> map = new HashMap<String, Object>();
map.put("k1", Integer.valueOf(999));
map.put("k2", map.remove("k1"));
System.out.println(map.get("k2"));
打印:
999
无异常(ConcurrentModificationException
)。
答案 2 :(得分:0)
由于m.remove
返回先前与该键关联的对象,因此您应该能够使用该对象。所以不,我不相信你应该得到例外。
答案 3 :(得分:0)
它们实际上不是同时发射的。首先调用remove,然后调用,然后调用get,所以我没有理由知道为什么会有异常。
如果需要在循环时修改,请参阅此处: Iterate through a HashMap