0

ConcurrentMap<Integer, MyObj>在我的程序中有。MyObj如果我知道密钥,我可以修改吗?不删除并放一个新的MyObj

4

3 回答 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 回答