4

弱いキーを持つ単純なハッシュ マップが必要です。Java 自身はそれWeakHashMapを私に与えてくれますが、ID セマンティクスではそうではありません (equals()キーの比較に使用します)。

Google の Guava ライブラリは、ハッシュ マップ メソッドを刷新しました。最新バージョン (14.0) では、 a を使用する代わりにMapMaker(ほとんどではないにしても多くのものが非推奨になっています)、CacheBuilderあらゆる種類のオプションである a を使用する必要があるようです。いいですね、weakKeys()オプションがあるので、それを使用します。しかし、結果として得られるキャッシュも同時実行されます (つまり、さまざまなマップを内部に保持し、独自の内部キー セットを使用して同時アクセスを規制します)、これをオフにすることはできません。ReadWriteLockマップへのアクセスを制御するために既に独自のものを使用しているため、同時実行は必要ありません。

わかりました。同時実行を受け入れます。地図をくれ!私は試します:

Map<Foo, Bar> map = CacheBuilder.newBuilder().weakKeys().build();

待って、それは!Cache<Object, Object>ではない を返します。Map<Foo, Bar>Google Guava で単純な ID ベースの弱いキー付きマップを取得するにはどうすればよいですか?

4

2 に答える 2

2

同時実行性を受け入れる意思があると仮定すると、ほぼ完了です。

CacheBuilder.newBuilder().weakKeys().build().asMap();

しかし、そうは言っても...あなたのユースケースは完全には明らかではありません。つまり、これらのプロパティを持つマップが必要な理由と、キーに別の同等の概念がある場合にアイデンティティセマンティクスを持つマップが必要な理由です

于 2013-02-27T21:22:20.263 に答える
2

弱いキーを持つ単純なハッシュ マップが必要です。

なぜそこから切り替えたいのかわかりませMapMakerCacheBuilder。あなたが欲しいのはそこにあるもののように聞こえますMapMaker

同時実行が必要だとは思わないかもしれませんが、GC は同時に実行でき、古いエントリがクリーンアップされる可能性があることを覚えておいてください。とにかく、同時実行にはそれほど費用がかかりません。

于 2013-02-28T15:53:32.690 に答える