我有课,例如MyDataClass
。
我有一个HashMap<String,MyDataClass> myMap;
对于myMap中的每个引用,我还具有对同一对象的其他一些MyDataClass引用。再具体一点:
MyDataClass c = new MyDataClass();
//configure c object with appropriate values
myMap.put("akeyvalue",c);
MyDataClass ref = c;
此时,ref和
myMap.get("akeyvalue")
引用内存中的同一对象。如果稍后执行
myMap.remove("akeyvalue")
,则将删除哈希图中的条目,但是对象ref仍将引用相同的位置。本质上,值myMap.get("akeyvalue")
仍然存在。如何将其更新为null,以便将其同步到哈希图?即如果我有不同的数据结构/集合引用相同的对象,那么要使它们保持同步的最佳模式/设计是什么?在我的小示例中,在我确实在myMap
上删除的代码中,我无权访问ref对象。我必须以某种方式找到ref并将其无效。通常,我可以有一个不同的数据结构,例如List<MyDataClass> refs;
谢谢
最佳答案
您必须手动执行此操作。如果您希望一个集合上的remove(..)
影响另一个集合:
扩展HashMap
(或任何集合)
在课堂上用setter和getter制作一个private Collection anotherCollection
覆盖remove(..)
,调用super.remove(..)
并同时调用anotherCollection.remove(..)