我想实现一个LRU cache
,其中最近最少使用的元素将被异步驱逐。我目前的想法是使用 aDictionary
来存储<key,value>
对,并跟踪对象的访问时间,以保持 a SortedDictionary <key, timestamp>
。这个想法是让异步线程从缓存中获取 LRU 项SortedDictionary
并从缓存中删除。但要使其正常工作,SortedDictionary
需要按值排序,而事实并非如此。
我本可以使用单独SortedList
的而不是SortedDictionary
保持 {key and timestamp} 在 timestamp 上排序,但是我必须进行“线性”查找以从列表中查找密钥(当我必须更新时间戳时,当再次访问相同的键时) - 如果可能的话,我正在寻找一种比线性方式更好的方式。有人可以分享解决这个问题的想法吗?
所以,我的问题归结为:
我必须在 <= logn time 中查找键以更新时间戳,同时能够根据时间戳对键进行排序。
一种考虑的方法是根据 {key,timestamp} 的时间戳部分保留其中一个键SortedDictionary
的<{key,timestamp},null>
顺序。虽然这很好,但问题是hashcode()
只需要返回 key.hashcode() (用于在更新时间戳时进行查找),同时equals()
还应该使用时间戳。所以 ,equals()
和hashcode()
是 冲突 的 , 所以 觉得 这 不是 好 主意 ...