我正在研究一种简单的数据结构,它将实现缓存驱逐策略。我想要实现的两种可能方案是LRU and MRU
我正在寻找类似地图的数据结构,其中键可能是时间(或者可能只是自动递增的整数),以了解最近使用或最近最少使用的缓存块。值是块的ID。
是否存在一个数据结构,通过插入键对数据进行排序,并在O(1)时间内检索某个键的值?
例如,Java的HashMap具有恒定的时间查找,但我需要获取所有密钥,对它们进行排序并选择最后一个或第一个,具体取决于我正在实现的算法。 SortedMap我应该选择什么?您是否建议任何其他适用于LRU和MRU实现的数据结构?
由于
答案 0 :(得分:3)
你是对的,SortedMap
根据插入的键对条目进行排序。最着名的SortedMap
实现是TreeMap
,它将条目存储为平衡二叉树。
来自javadoc:
{@link Map}进一步提供了总排序 键。地图是根据{@linkplain Comparable订购的 其键的自然排序,或通常由{@link Comparator} 在排序的地图创建时提供。这个顺序反映在 迭代已排序的地图的集合视图(由 entrySet,keySet和values方法)。 提供了几个额外的操作来利用 排序
即使从SortedMap
按升序排序返回条目和键,它也有方法firstKey()
和lastKey()
,这也可能有帮助。
特别是对于LRU:Java中最常见的方法是使用LinkedHashMap
,其方法为removeEldestEntry(Map.Entry)
。默认情况下它什么都不做,但您可以轻松扩展类并实现该方法。您可以找到更多信息here。