java独特集合更新模式
我有一个类,例如java独特集合更新模式,java,design-patterns,collections,Java,Design Patterns,Collections,我有一个类,例如MyDataClass。 我有一个HashMap myMap 对于myMap中的每个引用,我还有一些对同一对象的其他MyDataClass引用。具体而言: MyDataClass c = new MyDataClass(); //configure c object with appropriate values myMap.put("akeyvalue",c); MyDataClass ref = c; 此时ref和myMap.get(“akeyvalue”)引用内存中的同一
MyDataClass
。
我有一个HashMap 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”)
操作,hashmap中的条目将被删除,但对象ref仍将引用相同的位置。本质上,值myMap.get(“akeyvalue”)
仍然存在。如何将其更新为null,以便与hashmap同步?也就是说,如果我有引用相同对象的不同数据结构/集合,那么为了使它们保持同步,最好使用什么样的模式/设计?在我的小示例中,在我在myMap
上删除的代码中,我无法访问ref对象。我必须找到ref并将其置空。通常,我可以有一个不同的数据结构,例如列表引用代码>
谢谢您必须手动执行此操作。如果希望一个集合上的删除(..)
影响另一个集合:
- 扩展
HashMap
(或任何集合)
- 用你班上的setter和getter创建另一个
私人集合
- 覆盖
remove(…)
,调用super.remove(…)
并调用另一个集合。remove(…)
嗯,我认为你的问题背后有一些不正确的想法。首先,从集合中删除“akeyvalue”后,您无法通过映射再次访问它。是否有其他变量引用原始值并不重要
其次,如果您作为开发人员希望保留对同一对象的多个引用,则由您设计软件以清除对该对象的所有引用,将其引用计数减少到零,并允许垃圾收集器回收内存。例如,在可用对象的映射和已使用对象的映射中引用同一对象是多个映射的实际示例。你必须维护它们
在您的示例中,您不需要清除ref.Simple,因为它将在当前方法结束时自动清除。我们在objective c iphone开发中所做的就是按照您的要求去做,但在java开发中是不必要的
“如果我有引用相同对象的不同数据结构/集合,那么为了使它们保持同步,最好使用什么样的模式/设计?”
我相信答案是封装。如果使用清晰的API将相关数据结构保存在一个类下,那么API提供的任何操作都可以更新它们并保持同步。这些数据结构应该隐藏起来;通过这种方式,您可以保证对它们的任何访问都由封装类控制。我同意Bozho-subclass
HashMap
,并添加一种向新类添加侦听器的方法。
重写clear()
和remove()
以调用侦听器中的onDelete(对象o)
。
当其他对象想知道什么时候删除了某个内容时,只需向您的HashMap
注册一个侦听器,并实现onDelete(Object o)
方法,然后就可以通知它们了。我知道我无法通过映射再次访问它。我只想更新ref,以反映特定对象已永久消失。而且ref是全局的。我只是举了一个简单的例子。我的问题是,我有一个集合(集中式)收集特定值,另一个集合引用其中一些值进行其他处理。我只是想让这些收藏同步