
回复
一、设计思路
1. 数据存储
数据存储使用开放地址哈希表,而不是使用链表哈希的方式,从而保证存放最多指定容量的数据。如果发生冲突,则往下查找直到找到一个空位置。
对应的数据结构层面,则是使用数组,更确切地说是环形数组,因为当发生冲突时,需要查找除了直接通过 key % 容量capacity 取模之外的所有其他位置一遍,直到找到一个可以存放该键值对的位置。对于数据获取,也是类似的思路。
2. LRU特性实现
仿照Java的linkedhashmap来维护一个双向链表,每次访问一个节点或者新增一个节点则放到链表尾部,删除节点,则删除链表首部节点,实现O(1)复杂度。
二、编码实现
leetcode已通过: LRU缓存
作者:服务端开发
来源:CSDN