を実装したいのですがLRU cache、最近使用されていない要素が非同期で削除されます。私の現在のアイデアは、を使用しDictionaryてペアを格納し<key,value>、オブジェクトへのアクセス時間を追跡し、を保持することSortedDictionary <key, timestamp>です。非同期スレッドがからLRUアイテムを取得しSortedDictionary、キャッシュから削除するという考え方です。しかし、これが機能SortedDictionaryするためには、値でソートする必要がありますが、そうではありません。
{キーとタイムスタンプ}をタイムスタンプでソートしたままSortedListにするために、の代わりに別の方法を使用することもできますが、リストからキーを見つけるために「線形」ルックアップを実行する必要があります(タイムスタンプを更新する必要がある場合) SortedDictionary、同じキーに再度アクセスした場合)-可能であれば、線形よりも優れた方法を探しています。誰かがこの問題に対処するためのアイデアを共有できますか?
だから、私の問題はこれに要約されます:
タイムスタンプを更新するために<=logn時間でキーを検索すると同時に、タイムスタンプに基づいてソートされたキーを取得する必要があります。
考えられる1つの方法は、{key、timestamp}のタイムスタンプ部分に基づいてキーを並べ替える方法を維持することSortedDictionaryでした。<{key,timestamp},null>これは問題ありませんが、問題はhashcode()key.hashcode()(タイムスタンプの更新中のルックアップ用)を返す必要があることですが、タイムequals()スタンプも使用する必要があります。だから、equals()そしてhashcode()対立しているので、これは良い考えではないと感じました...