を実装したいのですが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()
対立しているので、これは良い考えではないと感じました...