6

我有一个HashMap<MyClass,ArrayList<WeakReference<MyObject>>>变量。

尽管从哈希映射中清除了弱引用,但我也希望能够从哈希映射中手动删除“MyObject”。这是一个中央侦听器对象。

当我将项目添加到链接到主哈希映射键值的数组列表时,我使用.add(new WeakReference<MyObject>(owner))

当我想从外部位置删除“自我”时,我发送“所有者”作为参数,这是真实对象。那么我怎样才能从我的哈希图中手动删除这个对象呢?我可以使用从传入的所有者参数生成的新 WeakReference 进行查询吗?旧"new WeakReference<MyObject>(owner)"的和新的"new WeakReference<MyObject>(owner)"会平等吗?所以我可以将它从哈希图中删除。

4

3 回答 3

7

旧的“new WeakReference(owner)”和新的“new WeakReference(owner)”是否相等?

不,他们不会平等。两者都是不同的对象,并且equals方法在弱引用中没有被覆盖。所以它默认检查两个引用是否相等,它们是否不相等。

建议:

Map<MyClass,Map<String,WeakReference<MyObject>>>

您可以将其更改list为 amap并使用对象中的某种ID作为弱引用的键。并且当所有者调用时,使用该对象的 ID 删除弱引用。

于 2013-03-01T09:23:42.253 回答
6

不,因为它的父类WeakReference和它的父Reference类都不会覆盖该equals()方法。所以它继承了equals()Object 的方法,它只认为两个对象是相同的对象时它们是相等的。

于 2013-03-01T09:35:53.223 回答
2

显而易见的选项是沿着列表循环,并将目标对象与每个引用的所指对象进行比较(owner.equals(reference.get())或者owner == reference.get()如果您要检查的是两个变量都指向同一个对象)。

于 2013-03-01T09:36:48.047 回答