私の質問は次のとおりです。一連の値を一連のキーに関連付けるにはどうすればよいですか。
- キーを直接変更せずに、
- キーがGCされるのを妨げることなく(値がキーを強く参照していることを知っている)
バックグラウンド:
一連の複雑なオブジェクト(値と呼びます)をいくつかの特定のオブジェクト(キーと呼びます)に関連付ける必要があります。
通常、これを行う方法は、キーと値を関連付けるハッシュマップを使用することです。
これはうまくいきます。ただし、マッピングがキーのガベージコレクションに干渉しないようにする必要もあります。つまり、マッピングが存在しても、キーがガベージコレクションされるのを防ぐことはできません。
通常、これを解決する方法は、キーへのWeakReferencesのみを保持するWeakHashMapを使用することです。ただし、WeakHashMapsは、マップ内の値にキーへの強力な参照がない場合にのみ機能します。残念ながら、私の値はすべて私のキーを強く参照しているため、キーがガベージコレクションされるのを防ぎます。これは、値の弱参照を使用することでも回避できますが、キーの前に値をGCすることを許可できないため、これは実行可能な解決策ではありません。キーオブジェクトがまだ存在している限り、値も存在する必要があります。
したがって、この状況に対する私の典型的な解決策は、HashMapの使用を停止し、代わりに、必要なすべての値への強力な参照を持つようにキーを変更することです。これにより、特定のキーのすべての値を取得できるようになりますが、自然なライフサイクルが完了したときにキーがGCされるのを防ぐことはできません。
残念ながら、キーを変更できないため、キーに直接値を追加することはできません。では、他にどのような賢い解決策がありますか?