aaarticlea/png;base64,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" alt="" />
1 package leetcode; import java.util.HashMap;
import java.util.Map; class Node{
int key;
int value;
Node pre;
Node next;
Node(int key,int value){
this.key=key;
this.value=value;
this.pre=null;
this.next=null;
}
}
class CacheList{
private Node head;
private Node tail;
CacheList(int capacity){
head = new Node(0,0);
tail = new Node(0,0);
head.next=tail;
tail.pre=head;
}
public void insertFirst(Node n){
n.next=head.next;
head.next.pre=n;
head.next=n;
n.pre=head; }
public Node removeLast(){
Node re = tail.pre;
tail.pre.pre.next=tail;
tail.pre=tail.pre.pre;
return re;
}
public void shiftToFirst(Node n){
n.pre.next=n.next;
n.next.pre=n.pre;
insertFirst(n);
}
} public class LRUCache {
Map<Integer,Node> map;
CacheList cacheList;
int capacity;
public LRUCache(int capacity) {
map = new HashMap<Integer,Node>();
cacheList= new CacheList(capacity);
this.capacity=capacity;
} public int get(int key) {
if(map.get(key)==null)
return -1;
else {
Node n= (Node) map.get(key);
cacheList.shiftToFirst(n);
return n.value;
}
} public void set(int key, int value) {
if(map.containsKey(key)){
Node come= (Node) map.get(key);
come.value=value;
cacheList.shiftToFirst(come);;
}else{
if(map.size()==capacity){
Node old=cacheList.removeLast();
map.remove(old.key); }
Node nn=new Node(key,value);
cacheList.insertFirst(nn);
map.put(key, nn);
} }
public static void main(String[] args){
LRUCache l = new LRUCache(1);
l.set(2, 1);
System.out.println(l.get(2));
l.set(3, 2);
System.out.println(l.get(2));
System.out.println(l.get(3)); }
}

最新文章

  1. madplay播放控制
  2. MCMC: The Metropolis-Hastings Sampler
  3. Reflector反编译.NET文件后修复【转】
  4. Poj(3686),最小权匹配,多重匹配,KM
  5. 趣味Python入门(一):初识Python
  6. 【转】做产品VS做项目
  7. (转载)PHP 下 CURL 通过 POST 提交表单失败的原因之一与解决办法
  8. HTML5 文件处理之FileAPI简介整理
  9. java疯狂演义----简单java IDE工具
  10. (转)Linux bash shell脚本语法入门
  11. 基于多重信号分类算法的DOA估计
  12. C、C++的Makefile的编写以及动、静态库的制作调用(包括MAC地址的获取及MD5加密)
  13. Java中this关键字的作用
  14. Spring学习(23)--- AOP之Introductions应用
  15. 阿里深度兴趣网络模型paper学习
  16. 【luogu2161】【SHOI2009】Booking会场预约
  17. WinRAR存在严重的安全漏洞影响5亿用户
  18. 用eclipse导入打war包的maven项目
  19. 深入理解JAVA虚拟机JVM
  20. 正则表达式&amp;自定义异常 典型案例

热门文章

  1. HBase性能优化方法总结(一):表的设计
  2. hdu1426 Sudoku Killer
  3. hadoop yarn
  4. PAT (Advanced Level) 1100. Mars Numbers (20)
  5. Lint Code——最多共线的点的个数
  6. nginx初级安装配置
  7. C#中String和stringBuilder的区别
  8. call_compile.sql
  9. oracle sql 分页
  10. 母亲的牛奶(milk)