LRU和LFU都是内存管理的页面置换算法。
LFU:最不经常使用淘汰算法(Least Frequently Used)。LFU是淘汰一段时间内,使用次数最少的页面。
LRU:最近最少使用淘汰算法(Least Recently Used)。LRU是淘汰最长时间没有被使用的页面。
LRU如下:
public class LRUCache {
class Node {
private int key;
private int val;
private Node next;
Node(int key, int val) {
this.key = key;
this.val = val;
next = null;
}
}
public Node first = new Node(-1, 0);//头节点;
public Node last=first;
public int capacity;
public LRUCache(int capacity) {
this.capacity = capacity;
}
public int get(int key) {
Node pre = this.first.next;
Node post = this.first;
while (pre != null) {
if (pre.key == key) {
if(this.last!=pre){
post.next = pre.next;
pre.next = null;
this.last.next = pre;
this.last = pre;
}
return pre.val;
}
pre = pre.next;
post = post.next;
}
return -1;
}
public void put(int key, int value) {
Node tmp = this.first.next;
int count = 0;
if (get(key) == -1) {
while (tmp != null) {
tmp = tmp.next;
count++;
}
//System.out.println("count:"+count);
if (count == this.capacity) {
tmp = new Node(key, value);
this.last.next= tmp;
this.last=tmp;