Caching 关于使用HashMap和链表组合的LRU缓存设计

Caching 关于使用HashMap和链表组合的LRU缓存设计,caching,data-structures,map,hashmap,lru,Caching,Data Structures,Map,Hashmap,Lru,指 我有一个关于答案的问题 假设我的散列图已满(面试官给了我一个最大值)[我知道如果我需要取一对已经存在于图中的散列图,我会将列表项移到前面,以指示最近的使用情况。] 但是,如果我有一个要添加的条目,并且这个键散列到与另一个键相同的位置,该怎么办。(碰撞)我该怎么办 我做链锁还是探测?如果我做链接,我应该增加地图的大小吗? 如果删除最旧的条目,它将清空哈希映射中的一个位置。但是新条目可能不会散列到此位置?它可能会散列到另一个完整条目?(不同的键、值对) 如何解决这个问题?映射的大小是映射中存在的

我有一个关于答案的问题

假设我的散列图已满(面试官给了我一个最大值)[我知道如果我需要取一对已经存在于图中的散列图,我会将列表项移到前面,以指示最近的使用情况。]

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

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

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


PS:对于LRU缓存,您可以看到

这种设计不包括链接,因为我们在这里设计的是直接映射缓存,这种折衷是已知的,直接映射缓存在从缓存中删除条目之前只考虑其最近性,而不考虑被请求的频率

链接列表大小将受到最大大小限制,当链接列表已满时,每次尝试添加新条目时,最后使用的条目(链接列表)和相应的地图条目将被删除。插入新条目的位置与删除的内容无关


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

这不是完全独立于LRU缓存中的使用,只是哈希映射的实现细节吗?是的,我也更新了标题。LRU缓存上的链接不错。