私のAndroidプロジェクトでは、キャッシュを部分的に無効にする方法があります (HashMap<Integer, Boolean>
)。キー値が定義された値より大きいHashMap内のすべての項目を削除する方法
現在、サードパーティのコードとの互換性のためにHashMapを使用しています。
私は素晴らしい答えを見つけましたhereしかし、それはTreeMapに切り替える必要があります。与えられた解決策は次のとおりです。
treeMap.tailMap(key).clear();
TreeMapのソリューションは、HashMapの上で私の努力よりもはるかに優れています:
//where hashMap is a copied instance for the method
for (Integer key : hashMap.keySet()) {
if (key > minPosition) {
hashMap.remove(key);
}
}
はTreeMapのと類似のHashMapでこれを行うための良い時間/複雑ソリューションは、あります溶液?
独自の実装で提供できるものは、TreeMapソリューションよりはるかに優れています(ただし、キーの値ではなく、挿入順に基づいて並べ替えられます)。削除するメンバの開始位置を特定するためにバイナリ検索を実装するだけで、開始ノードを次のノードに設定することができます。これは、わかっていればツリーマップでバックグラウンドで実行されます。それはもっと安全な賭けだから、私はちょうどそれで行くだろう。 –
こんにちは、私はそれがTreeMapソリューションよりも良いとは思いません。 *私の*解決策よりも優れたものが欲しい。 TreeMapの効率に近いもの。これまでのところ、TreeMapは私にとっても良いようですが、HashMapでうまくやることができたら、私はコミットしたくありません(この愚かなサードパーティのものはすべてHashMapに変換してくれませんMapインターフェイスに固執するだけです。 –
'hashMap.keySet()'を反復処理することができますので、完全な 'Entry'をロードしないでください。 –