Javadocsは、「キーが破棄されると、そのエントリはであり、実際にはがマップから削除されました」と述べています。WeakHashMapと強く参照される値
ただし、このようなMap.Entry
エントリを時々削除するスレッドがない場合、値オブジェクトはマップによって強く参照されませんか?しかし、そのようなスレッドは実行されていないので、メソッド呼び出しだけで、そのようなエントリを一度に1つずつ削除できます。
ほとんどの場合、その理由としてWeakHashMap<K, WeakReference<V>>
を使用します。なぜ彼らはそれをデフォルトの振る舞いにしていないでしょうか?
http://stackoverflow.com/questions/2473410/question-about-weakhashmapはほぼ同じ質問です。しかし私は自分の主張が正しかったかどうかを知りたがっています.get()は、キーがgc'edされたことを発見したときにのみ削除されますが、WeakReferencesを値として使用しない限り、 –
ええ、ちょうど投票されました。別のものが必要な場合は、独自のバージョンを作成してください。 –
何か別のものが必要な場合は、図書館を使用してください。 Guavaには、MapMakerがあり、キーと値の参照の強さを設定できます:http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/collect/MapMaker html –