我有课,例如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(..)

10-06 06:12