私はWeakHashMapを使ってある種のキャッシュを作ろうとしている別の人だと思います。そして、私はそれについていくらかの助けが必要です。
TrackData
オーディオトラックに関する情報を含むオブジェクトがたくさんあります。次に、内部Track
を参照し続けるオブジェクトがあります。TrackData
複数のトラックが同じを指すことができますTrackData
。次にTrackDataCache
、次のようなクラスがあります。
public class TrackDataCache {
private static TrackDataCache instance = new TrackDataCache();
public static TrackDataCache getInstance() {
return instance;
}
private WeakHashMap<TrackData, WeakReference<TrackData>> cache = new WeakHashMap<TrackData, WeakReference<TrackData>>();
public void cache(Track track) {
TrackData key = track.getTrackData();
WeakReference<TrackData> trackData = cache.get(key);
if (trackData == null) {
cache.put(key, new WeakReference<TrackData>(key));
} else {
track.setTrackData(trackData.get());
}
}
}
したがって、トラックをロードするときに呼び出しTrackDataCache.cache()
、そのトラックデータが以前にロードされていない場合は、キャッシュされるか、キャッシュされたコピーに置き換えられます(TrackData
equals()メソッドをオーバーライドして場所とサブソングインデックスを確認します)。トラックを削除するときに気にする必要がないように、弱参照を使用したいと思います。
WeakHashMapでキーへの弱参照を保持するのは大丈夫かどうかを尋ねたかったのですが、そうでない場合は、この問題にどのように対処すればよいですか?弱参照とキャッシュされた値の一定時間の取得が必要です。私はWeakHashMapコードをコピーしてgetEntry()
メソッドを公開することを考えていました。これで問題は解決しますが、それは非常に悪いハックです:(
PS。apacheまたはgoogleコレクションのいずれかにこのようなものがあることは理解していますが、2Mbの依存関係を追加したくありません。