LRU
2018-09-10 01:02:59来源:博客园 阅读 ()
Java实现最近最少使用
package com.leetcode.design;
import java.util.Hashtable;
public class LRU {
private Hashtable<Integer,DLinkedNode> cache = new Hashtable<Integer,DLinkedNode>();
private int count;
private int capacity;
private DLinkedNode head,tail;
public LRU(int capacity){
this.capacity = capacity;
this.count = 0;
head = new DLinkedNode();
head.pre = null;
tail = new DLinkedNode();
tail.post = null;
head.post = tail;
tail.pre = head;
}
public int get(int key){
DLinkedNode node = cache.get(key);
if(node == null){
return -1;
}
this.removeToHead(node);
return node.value;
}
public void set(int key,int value){
DLinkedNode node = cache.get(key);
if(node == null){
DLinkedNode newNode = new DLinkedNode();
newNode.key = key;
newNode.value = value;
this.cache.put(key,newNode);
this.addNode(newNode);
++count;
if(count>capacity){
DLinkedNode tail = this.popTail();
this.cache.remove(tail.key);
--count;
}
}else{
node.value = value;
this.removeToHead(node);
}
}
private DLinkedNode popTail() {
DLinkedNode res = tail.pre;
this.removeNode(res);
return res;
}
private void removeToHead(DLinkedNode node) {
this.removeNode(node);
this.addNode(node);
}
private void removeNode(DLinkedNode node) {
DLinkedNode pre = node.pre;
DLinkedNode post = node.post;
pre.post = post;
post.pre = pre;
}
private void addNode(DLinkedNode node) {
node.pre = head;
node.post = head.post;
head.post.pre = node;
head.post = node;
}
}
创建一个hashtable的缓存,并在构造函数中初始化头节点、尾节点和最大容量,每获取一次存在的节点,均将该节点移动到头部,每加入一个节点,首先判断是否存在该节点,若存在则put替换旧的节点,计数加一,并将其移动到头部,然后判断是否超过最大容量,若超过则移除尾部节点,计数减一
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- DES/3DES/AES 三种对称加密算法实现 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash