guava mapmaker()。weakkeys()。makemap()vs weakhashmap
-
25-09-2019 - |
質問
ソケットを介してプロトコルバッファーを使用してノードツリーを取得しているSCALAサーバーがあり、各ノードに追加データを添付する必要があります。
単一のスレッド付きコンテキストで、ノードツリーと関連するデータの両方が強力な参照を同時に削除する場合(範囲外に出るため)、Google GuavaのMapMakerをWeakHhashmapを使用してBeawKeys()で使用する理由はありますか? MapMakerでは、この場合には必要ない同期アクセスを支払うと思われます。
余談ですが、MapMakerが等価設定にアクセスできるようにすると、参照平等を選択できますが、弱い参照やソフト参照を気にしない場合に役立ちます。
解決
1つの重要な欠点 WeakHashMap
「アイデンティティマップ」ではないということです。つまり、使用します equals()
と hashCode
(それよりも ==
と identityHashCode
)キー上で、これは本当に弱いキーにとって意味がありません。あなたは、あなたのキーが彼らのアイデンティティの平等を使用することを確認することによって、このバグを回避することができます equals
方法。
所属していません StackOverflow