关于使用哈希图和链表组合的LRU缓存设计



参考LRU缓存设计

我有一个关于答案的问题。

假设我的哈希图已满(面试官给了我最大大小)[我了解如果我需要获取地图中已经存在的一对,我会将列表条目移到前面以指示最近的使用。

但是,如果我有一个要添加的条目,并且此键散列到与不同键相同的位置怎么办。(碰撞)我该怎么做?

我应该进行链接还是探测?如果我进行链接,我应该增加地图大小吗?如果我删除最旧的条目,它会清空哈希映射中的一个位置。但是新条目可能不会散列到此位置?它可能会散列到另一个完整条目?(不同的键、值对)如何解决这个问题?

此设计不包括链接,因为我们在这里设计直接映射缓存,并且已知直接映射缓存在从缓存中删除条目之前仅考虑条目的新近度,而不是请求的频率。

最大大小限制将施加在链表大小上,每次我们在链表已满时尝试添加新条目时,都会删除上次使用的条目(链表)和相应的映射条目。要插入新条目的位置与删除的内容无关。

有关并发的更多详细信息,请查看此链接。

map的大小是Map中存在的键值对的数量,因此它与键值对是否存在于同一哈希桶中还是不同哈希桶中无关。
因此,如果您检查Hashmap的数据结构,则其LinkedList数组,因此当存在哈希冲突时,就会有链接,并且map的大小也会增加。
现在,如果你的新条目散列到不为空的位置,你需要像我们在 linkedlist 中所做的那样链接。

PS:对于LRU缓存,您可以看到链接哈希图

最新更新