LRU Cache
来源:互联网 发布:凸包算法 python 编辑:程序博客网 时间:2024/05/17 07:53
Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get
and set
.
get(key)
- Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.set(key, value)
- Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.
使用内部类Node存储插入的数据,map存储key和Node的对应关系;
get和set是要将该节点放置在head处,解法中使用head和end两个指针帮助头结点的设置和末节点的删除
public class LRUCache { class Node{ public Node pre; public Node next; public int value; public int key; public Node(int key, int value){ this.key = key; this.value = value; } } private int capacity; private int size; private HashMap<Integer, Node> map= new HashMap<Integer, Node>(); private Node head; private Node end; public LRUCache(int capacity) { this.capacity = capacity; size = 0; } public int get(int key) { if(map.containsKey(key)){ Node lastest = map.get(key); remove(lastest); setHead(lastest); return lastest.value; } else return -1; } public void set(int key, int value) { if(map.containsKey(key)){ Node lastest = map.get(key); remove(lastest); setHead(lastest); lastest.value = value; } else{ Node lastest = new Node(key, value); if(size < capacity){ size++; } else{ map.remove(end.key); end = end.pre; if(end != null) end.next = null; } setHead(lastest); map.put(key, lastest); } } private void remove(Node cur){ Node pre = cur.pre; Node next = cur.next; if(pre != null){ pre.next = next; } else head = next; if(next != null){ next.pre = pre; } else end = pre; } private void setHead(Node cur){ cur.next = head; cur.pre = null; if(head != null){ head.pre = cur; } head = cur; if(end == null){ end = cur; } }}
0 0
- LRU Cache
- LRU Cache
- LRU Cache
- LRU Cache
- LRU Cache
- lru cache
- LRU Cache
- LRU Cache
- LRU Cache
- LRU Cache
- LRU Cache
- LRU Cache
- LRU Cache
- LRU cache
- LRU Cache
- LRU Cache
- LRU Cache
- LRU Cache
- Python入门教程-05 休闲一刻 文件重命名示例
- android File存储对象 File存储到SD卡
- xml与对象的相互转化
- E_mail地址判断函数
- 编程之美初赛第一场--焦距
- LRU Cache
- adb wifi连接android设备
- Debian7.3下创建Android开发环境
- ASP中利用ADO显示Excel文件内容的函数
- UVa 297 - Quadtrees
- 安卓Handel和Message(二)
- 一套加解密字符串的function
- Struts2+Spring+Hibernate step by step 06 整合Hibernate
- NGUI官网示例7-- ScrollView讲解