实现方法:哈希表 + 双向链表
这个问题可以用哈希表,辅以双向链表记录键值对的信息。所以可以在 O(1)时间内完成 put 和 get 操作,同时也支持O(1) 删除第一个添加的节点。
使用双向链表的一个好处是不需要额外信息删除一个节点,同时可以在常数时间内从头部或尾部插入删除节点。
一个需要注意的是,在双向链表实现中,这里使用一个伪头部和伪尾部标记界限,这样在更新的时候就不需要检查是否是 null 节点。
Java实现:
import java.util.HashMap;
public class LRUCache {
class Node {
int key;
int value;
Node prev;
Node next;
}
private void addNode(Node node) {
/**
* Always add the new node right after head.
*/
node.prev = head;
node.next = head.next;
head.next.prev