我在我的程序中有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. 是否可以在不更改散列值的情況下修改文件
- 3. 我可以在不刪除MongoDB的情況下修改現有索引嗎?
- 4. 如何檢測是否在這種情況下刪除項目
- 5. 在不知道ItemName的情況下從SimpleDB中刪除項目?
- 6. 是否可以在不修改JS文件的情況下使用Dojo構建?
- 7. 我可以在不刪除PriorityQueue的情況下獲得一個項目嗎?
- 8. 是否可以在不移除並重新創建容器的情況下修改docker運行選項?
- 9. 是否可以在不設置功能ID的情況下刪除功能?
- 10. 是否可以在不刪除線條的情況下淡出文本?
- 11. 是否可以在不刪除整個項目的情況下刪除iOS鑰匙串中的帳戶項目的密碼?
- 12. 是否可以在沒有地圖的情況下顯示Google地圖導航?
- 13. 如何在不刪除文件的情況下從netbeans中刪除項目?
- 14. 是否可以在不重新編譯的情況下更改exe的圖標?
- 15. 是否可以在不重新編譯項目的情況下更改axis2 soap地址?
- 16. 是否可以在不啓動npm的情況下運行React項目?
- 17. xcode是否可以在不使用代碼的情況下旋轉UI項目?
- 18. 是否可以在不使用回調的情況下使用Google地圖?
- 19. 是否可以在不刪除父視圖的情況下以編程方式添加視圖?
- 20. 在不刪除MKAnnotation的情況下更改MKAnnotation視圖
- 21. 是否可以在不手動編輯gitolite.conf文件的情況下修改野生respos的git config選項?
- 22. 是否可以在不更改當前記錄的情況下修改客戶端數據集中的數據?
- 23. 是否可以在不改變上下文的情況下調用function.apply?
- 24. 可能在不修改pom.xml的情況下更改distributionManagement網站?
- 25. 我可以在不刪除任何屬性的情況下刪除對象嗎?
- 26. 是否可以在不修剪結果的情況下使用ArrayBuilder?
- 27. CKEditor:在不改變數據的情況下修改視圖
- 28. 在不改變環境的情況下從表中刪除列
- 29. 是否可以在不拖放的情況下使用Linq-SQL?
- 30. 是否可以在不使用debugfs的情況下使用ftrace?
這很好,我不知道它。謝謝。 – marxin 2012-04-06 18:08:47