Javaの弱いハッシュマップキーとしての文字列を効果的に使用する方法、または代替ソリューション

StackOverflow https://stackoverflow.com//questions/23038912

質問

ユーザーデータを格納するJavaのプロジェクトを管理しています。ユーザーはオンライン、またはオフラインにすることができます。ユーザーがオンラインの場合、それらのデータは簡単にアクセシビリティを簡単にデータオブジェクトにロードされ、ログオフ時にオフロードされます。

しかしながら、オフラインユーザの場合、データを同時に操作した複数のコマンドからのデータの同時アクセスによるデータ損失を防止するために、Loadedユーザデータオブジェクトのキャッシュとして弱いHASHMAPを格納する。変更するためにオフラインデータオブジェクトにアクセスする必要がある必要がある場合は、ファイルからロードする前にシステムは最初にキャッシュをチェックします。

それらの保存方法について考えることができる唯一のことは文字列キーであり、これはユーザーのユーザー名を表します。しかし、Javaがどのように機能するかのために、VMの文字列キャッシングシステムのために常に機能しているとは限りません。

もともと文字列ラッパーを使用することを考えたが、再びHASHMAPSがどのように機能しているか(HashCodeを使用して)、新しい文字列ラッパーを作成することは私が必要な値を取得しないで、そして文字列ラッパーを保存した場合すべての時間に強い参照を保存することで目的を倒します(弱いハッシュマップからのキーの取り外しを防ぎます)。

私は、弱いHashMapがどのように使用されるべきであるかを理解していないかもしれません:sこれが弱いハッシュマップがどのように使用されるべきであるかどうかではない場合は、私が望むことをする方法の他のアイデアを受け入れるために開いています。

役に立ちましたか?

解決

この段落の最後の文では、gidhashmapのためのJavaDocでは予測不可能な問題について説明します。

このクラスは主に等しいオブジェクトでの使用を目的としています メソッドメソッド==演算子を使用してオブジェクトIDをテストします。そのようなものになる キーは廃棄されることができないので、できないので、できません。 後でいくつかの後で弱いハッシュマップでそのキーの検索 そのエントリが削除されたことを驚かせた。このクラスは働きます 等しい方法が基づいていない重要なオブジェクトと完全によく 文字列インスタンスなどのオブジェクト識別情報。そのような再演奏性を持つ ただし、キーオブジェクトは、WEAKHASHMAPエントリの自動削除 鍵が破棄されたのは、混乱を招くことが証明されるかもしれません。

あなたが本当に欲しいのは、キーがゴミ収集したときではなく、値がゴミ箱に収集されたときではなく、エントリが削除された地図です。つまり、キーが弱いのではなく、値が弱くなるときです。この質問でその問題についての助けを見つけることができます:

Javaの弱いハッシュマップ - 値の弱さに基づいてエントリを削除する必要があります。キー

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top