LRU和MRU高速缓存逐出策略的分类密钥数据结构

时间:2013-03-06 06:53:16

标签: java caching data-structures lru mru

我正在研究一种简单的数据结构,它将实现缓存驱逐策略。我想要实现的两种可能方案是LRU and MRU

我正在寻找类似地图的数据结构,其中键可能是时间(或者可能只是自动递增的整数),以了解最近使用或最近最少使用的缓存块。值是块的ID。

是否存在一个数据结构,通过插入键对数据进行排序,并在O(1)时间内检索某个键的值?

例如,Java的HashMap具有恒定的时间查找,但我需要获取所有密钥,对它们进行排序并选择最后一个或第一个,具体取决于我正在实现的算法。 SortedMap我应该选择什么?您是否建议任何其他适用于LRU和MRU实现的数据结构?

由于

1 个答案:

答案 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