我想實現一個LRU cache
,其中最近最少使用的元素將被異步驅逐。我目前的想法是使用Dictionary
來存儲<key,value>
對,並跟蹤訪問對象的時間,以保留SortedDictionary <key, timestamp>
。這個想法是讓異步線程從SortedDictionary
獲取LRU項並從緩存中移除。但爲了這個工作,SortedDictionary
需要按價值排序,而不是。按C#中的值排序的字典(LRU緩存)
我本來可以使用單獨的SortedList
而不是SortedDictionary
來保持時間戳上的{key和timestamp}排序,但是我必須做一個「線性」查找來查找列表中的鍵(當我必須更新時間戳,當再次訪問同一個鍵時) - 如果可能,我正在尋找比線性更好的方法。有人可以分享想法來處理這個問題嗎?
所以,我的問題歸結爲:
我已經查找在< = LOGN時間鍵,而在同一時間能夠拿到鑰匙排序基於時間戳更新時間戳。
想到的一種方法是保留的<{key,timestamp},null>
,它根據{key,timestamp}的時間戳部分對鍵進行排序。雖然這很好,但問題是hashcode()
只需要返回key.hashcode()(用於在更新時間戳時查找),而equals()
也應該使用時間戳。所以,equals()
和hashcode()
是衝突的,所以覺得這不是一個好主意......
換句話說,您希望SortedDic像優先級隊列一樣工作,其中優先級由時間戳定義? SortedDictionary有什麼問題?順便說一句,它不是O(1)它是O(logn) - 它可能被實現爲紅黑樹。 –
2012-07-26 12:17:06