是否可以在不删除的情况下修改Map中的项目?

时间:2012-04-06 17:41:39

标签: java map

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

3 个答案:

答案 0 :(得分:4)

这取决于您对“修改”的定义。如果你想改变MyObj内部的东西,并且该对象是可变的,你当然可以这样做。

ConcurrentMap<Integer, MyObj> map = /* snip */;
map.get(someKey).callMutatorMethod();

如果要用全新的实例替换对象,只需调用Map#put(),如果存在这样的值,将覆盖现有的映射值。

答案 1 :(得分: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"

答案 2 :(得分:0)

是的,你可以。地图只包含对象的引用。无需更新地图即可更改对象。

Map<Integer, MyObj> myMap = new ConcurrentMap<Integer, MyObj>();
myMap.put(1, new MyObj());
MyObj obj = myMap.get(1);
obj.setFoo("Foo");