6

変数がありHashMap<MyClass,ArrayList<WeakReference<MyObject>>>ます。

弱い参照はハッシュマップから消去されますが、HashMap から「MyObject」を手動で削除できるようにしたいと考えています。これは中心的なリスナー オブジェクトです。

メインのハッシュマップ キーの値にリンクされている arraylist に項目を追加するときは、次を使用します.add(new WeakReference<MyObject>(owner))

外部の場所から「自己」を削除したい場合は、実オブジェクトである「所有者」をパラメーターとして送信します。ハッシュマップからこのオブジェクトを手動で削除するにはどうすればよいですか? 受信した所有者パラメーターから生成された新しい WeakReference でクエリを実行できますか? 古いもの"new WeakReference<MyObject>(owner)"と新しい"new WeakReference<MyObject>(owner)"ものは等しくなりますか?したがって、ハッシュマップから削除できます。

4

3 に答える 3

7

古い「新しいWeakReference(owner)」と新しい「newWeakReference(owner)」は同じですか?

いいえ、それらは等しくなりません。両方とも異なるオブジェクトであり、equalsメソッドは弱参照でオーバーライドされません。したがって、デフォルトでは、両方の参照が等しいかどうかをチェックします。

提案:

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

をに変更しlistて、オブジェクト内のあるIDのようなものを弱参照のキーmapとして使用できます。また、所有者が呼び出すときに、そのオブジェクトのIDを使用して弱参照を削除します。

于 2013-03-01T09:23:42.253 に答える
6

いいえ、WeakReferenceその親Referenceクラスもequals()メソッドをオーバーライドしないためです。したがってequals()、Objectからメソッドを継承します。このメソッドは、2つのオブジェクトが同じオブジェクトである場合にのみ等しいと見なします。

于 2013-03-01T09:35:53.223 に答える
2

明らかなオプションは、リストに沿ってループし、ターゲットオブジェクトをすべての参照の指示対象と比較することです(owner.equals(reference.get())またはowner == reference.get()、両方の変数がまったく同じオブジェクトを指していることを確認している場合)。

于 2013-03-01T09:36:48.047 に答える