Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java独特集合更新模式_Java_Design Patterns_Collections - Fatal编程技术网

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是全局的。我只是举了一个简单的例子。我的问题是,我有一个集合(集中式)收集特定值,另一个集合引用其中一些值进行其他处理。我只是想让这些收藏同步