这是一个奇怪的问题。但是这里。
我有一个对象X,它被插入一个数组中,在一个哈希表中,在另一个对象(容器对象)中。它表示在3d空间中P点的X实例。
有时我会想要在给定的P处刷新X.这很简单 - 从表中回忆点P并直接操作数组。
现在说那些X是Y的一部分 - Y的片段是准确的。让我们说给定的Y消失了。现在,如果Y消失了所有附在它上面的X也应该消失,对吗?
准确地说,从模型中概念性地移除了对象Y.它是否实际被删除是无关紧要的(例如,它可能存储在其他地方。)但重点是,除了检查Y附近的每个点的X之外,我如何从哈希表中正确删除它们?
这实际上是关于整个参考文献的一般性问题。在其他情况下,对象存在多个引用,我希望能够快速删除该对象,而无需在其他位置导航到该对象。
这意味着当一个引用类删除对象时,该对象应该被普遍“删除”;其他列表都不应该保留对它的引用。
答案 0 :(得分:1)
在Java中,WeakReference<T>
个对象通常会解决此问题:如果您不希望引用阻止收集对象X
,请将其设为WeakReference<X>
:Java将为null当X
不再被其他任何地方强烈引用时,它就会消失。
例如,您可以创建一个List<X>
来保留所有活动对象,并使X
的所有其他引用变弱。当一个对象从列表中删除并且它的最后一个强引用消失时,无论对它的弱引用的数量如何,它都变得可收集。明显的缺点是在解除引用每个弱引用之前需要注意空值。此时,Java会为您完成所有引用跟踪;所有你需要做的就是清除掉空的弱引用,这比搜索大量列表容易得多。