我在我的程序中有ConcurrentMap<Integer, MyObj>
。 如果我知道密钥,我可以修改MyObj
吗?没有删除并把一个新的MyObj
?是否可以在不删除的情况下修改地图中的项目?
0
A
回答
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"
4
这取决于您对“修改”的定义。如果你想改变MyObj
内部的东西,并且该对象是可变的,你当然可以做到这一点。
ConcurrentMap<Integer, MyObj> map = /* snip */;
map.get(someKey).callMutatorMethod();
如果你想更换一个全新的实例的对象,你可以叫Map#put()
,这将覆盖现有的映射的值,如果该值存在。
+1
如果你有'MyObj'的引用,没有什么能阻止你改变它的状态。 'ConcurrentMap'只能确保对映射本身的修改(放置,删除等)不会在其他线程中进行修改。 – oconnor0 2012-04-06 17:49:10
0
是的,你可以。该地图只保存对该对象的引用。该对象可以更改而不必更新地图。
Map<Integer, MyObj> myMap = new ConcurrentMap<Integer, MyObj>();
myMap.put(1, new MyObj());
MyObj obj = myMap.get(1);
obj.setFoo("Foo");
相关问题
- 1. 是否可以在不更改散列值的情况下修改文件
- 2. 在不知道ItemName的情况下从SimpleDB中删除项目?
- 3. 我可以在不删除PriorityQueue的情况下获得一个项目吗?
- 4. 是否可以在不移除并重新创建容器的情况下修改docker运行选项?
- 5. 是否可以在不删除线条的情况下淡出文本?
- 6. 如何在不删除文件的情况下从netbeans中删除项目?
- 7. 是否可以在不重新编译的情况下更改exe的图标?
- 8. 是否可以在不启动npm的情况下运行React项目?
- 9. 是否可以在不删除父视图的情况下以编程方式添加视图?
- 10. 是否可以在不手动编辑gitolite.conf文件的情况下修改野生respos的git config选项?
- 11. 我可以在不删除任何属性的情况下删除对象吗?
- 12. CKEditor:在不改变数据的情况下修改视图
- 13. 在不改变环境的情况下从表中删除列
- 14. 是否可以在不拖放的情况下使用Linq-SQL?
- 15. 是否可以在不使用Rails的情况下使用FactoryGirl?
- 16. 是否可以在不禁用JavaScript的情况下禁用AJAX?
- 17. 是否可以在不显示PreferenceScreen的情况下显示DialogPreference?
- 18. 是否可以在不使用查询字符串的情况下传递webpack条目项目配置选项?
- 19. 如何在下列情况下改进代码以删除数组中的项目?
- 20. 如何在不做任何项目修改的情况下加速xcode构建?
- 21. 如何在不修改原始类的情况下删除instancemethod对象,但不修改原始类
- 22. 在不知道父项的情况下删除节点(JavaFX)
- 23. 我可以在不修改'this'的情况下使用jquery的'bind'吗?
- 24. 是否可以在不阻止点击事件的情况下显示图片?
- 25. Android:是否可以在不重新采样的情况下绘制大图像?
- 26. 在不使迭代器无效的情况下添加和删除项目
- 27. Python库可以在不转码的情况下修改MP3音频
- 28. 是否可以在不修改父类的情况下将成员变量初始化推迟到继承类?
- 29. 在eclipse中,是否可以在不更改源文件夹的情况下更改默认包的内容?
- 30. 是否可以在不使用WindowsBuilder的情况下在eclipse中创建GUI?
这很好,我不知道它。谢谢。 – marxin 2012-04-06 18:08:47