LRU缓存策略
来源:互联网 发布:淘宝分销商平台 编辑:程序博客网 时间:2024/04/30 15:18
题目
为最近最少使用(LRU)缓存策略设计一个数据结构,它应该支持以下操作:获取数据(get)和写入数据(set)。
获取数据get(key):如果缓存中存在key,则获取其数据值(通常是正数),否则返回-1。
写入数据set(key, value):如果key还没有在缓存中,则写入其数据值。当缓存达到上限,它应该在写入新数据之前删除最近最少使用的数据用来腾出空闲位置。
解题
参考链接
1.利用双链表记录顺序
2.利用HashMap记录key-value
删除时候:
删除map中值,删除结点
public class Solution { private class Node{ Node prev; Node next; int key; int value; public Node(int key, int value) { this.key = key; this.value = value; this.prev = null; this.next = null; } } private int capacity; private HashMap<Integer, Node> hs = new HashMap<Integer, Node>(); private Node head = new Node(-1, -1); private Node tail = new Node(-1, -1); public Solution(int capacity) { this.capacity = capacity; tail.prev = head; head.next = tail; } public int get(int key) { if( !hs.containsKey(key)) { return -1; } // remove current Node current = hs.get(key); current.prev.next = current.next; current.next.prev = current.prev; // move current to tail move_to_tail(current); return hs.get(key).value; } public void set(int key, int value) { if( get(key) != -1) { hs.get(key).value = value; return; } if (hs.size() == capacity) { hs.remove(head.next.key); head.next = head.next.next; head.next.prev = head; } Node insert = new Node(key, value); hs.put(key, insert); move_to_tail(insert); } private void move_to_tail(Node current) { current.prev = tail.prev; tail.prev = current; current.prev.next = current; current.next = tail; }}
0 0
- LRU 缓存策略
- LRU 缓存策略
- LintCode-LRU缓存策略
- LRU缓存策略
- LRU缓存策略
- lintcode,LRU缓存策略
- LRU缓存策略
- LRU缓存策略设计
- LRU缓存策略设计
- LRU缓存策略-LintCode
- LRU缓存策略
- lintcode LRU缓存策略
- 【链表】实现LRU缓存策略LRU Cache
- 缓存失效策略(fifo lru lfu)
- LRU策略
- 利用LinkedHashMap简单实现基于LRU策略的缓存
- 简单LRU算法实现缓存大小的限制策略
- FIFO、LFU、LRU三种缓存策略之间的区别
- Android OkHttp完全解析 是时候来了解OkHttp了
- centos 之nginx的安装使用
- Android开发之Tween(补间动画)完全解析(上)——xml文件配置的实现
- “拿来”主义有感
- Freemarker 从入门到放弃
- LRU缓存策略
- 查看字典元素
- 部署WEB应用的三种方式
- dot语法
- Android Studio 开发环境的搭建与安装
- jsp权限菜单绑定的基本实现
- shell脚本,在循环体中执行ssh命令的问题
- dmytrodanylyk/circular-progress-button源码解析(二)
- 贝塞尔曲线