我ConcurrentMap<Integer, MyObj>
在我的程序中有。MyObj
如果我知道密钥,我可以修改吗?不删除并放一个新的MyObj
?
问问题
80 次
3 回答
4
这取决于您对“修改”的定义。如果你想改变内部的东西MyObj
,并且那个对象是可变的,你当然可以这样做。
ConcurrentMap<Integer, MyObj> map = /* snip */;
map.get(someKey).callMutatorMethod();
如果你想用一个全新的实例替换对象,你可以调用Map#put()
,如果存在这样的值,它将覆盖现有的映射值。
于 2012-04-06T17:44:21.033 回答
3
不仅如此,如果你保留对对象的原始引用,你仍然可以修改它。
MyObject o = new MyObject();
myMap.put("key", o);
o.setName("foo");
myMap.get("key").getName(); //will return "foo"
myMap.get("key").setName("bar");
myMap.get("key").getName(); //will return "bar"
o = null; //this applies only for your local reference, not for the map
myMap.get("key").getName(); //will STILL return "bar"
于 2012-04-06T17:58:01.420 回答
0
是的你可以。地图只是保存对对象的引用。对象可以更改而无需更新地图。
Map<Integer, MyObj> myMap = new ConcurrentMap<Integer, MyObj>();
myMap.put(1, new MyObj());
MyObj obj = myMap.get(1);
obj.setFoo("Foo");
于 2012-04-06T17:53:12.190 回答