lru算法java实现_用JAVA实现一个简单LRU算法

一个LRU算法最简单的有如下的功能:这里我们先不考虑用哈希表做优化

实际上就是一个链表,通过链表来模拟实现

1eccd13181e106894facf1e39f67ac35.png

public class Linked {

// 用链表实现一个LRU缓存 (大小为100),要求实现添加一个数据的方法。(自己定义节点类,存储的数据类型为int)。

public static void main(String args[]){

ListLRU lru = new ListLRU(6);

lru.addNode(5);

lru.addNode(4);

lru.addNode(3);

lru.addNode(2);

lru.addNode(1);

lru.printLRU();

lru.addNode(6);

lru.printLRU();

lru.addNode(3);

lru.printLRU();

lru.addNode(7);

lru.printLRU();

}

}

public class ListLRU { //带头结点的单链表,根据题意,所有结点值不同

static int lenLimit;

static Node headNode = new Node(-1);//结点值-1表示这是头结点

public ListLRU(int lenLimit){

this.lenLimit = lenLimit;

}

static public int length(){

int length = 0;

Node scan = headNode;

while(scan.next!=null){

scan=scan.next;

length++;

}

return length;

}

//添加的逻辑:

public void addNode(int value){

Node newone = new Node(value);//先创建一个待加入的新结点

Node p = headNode;

while(p.value != newone.value&&p.next!=null){

p=p.next;

}

//出循环两种可能,遍历结束没有找到,或者是找到了

if(p.next == null){//遍历完了没有找到

int len=ListLRU.length();

if(len

newone.next = headNode.next;

headNode.next = newone ;

}else{

//先删除最后一个结点

deleteNode(p.value);

//再在列表头部添加

newone.next = headNode.next;

headNode.next = newone;

}

}else{ //找到了这个结点,删除,在头部添加

deleteNode(p.value);

newone.next = headNode.next;

headNode.next = newone;

}

}

public boolean deleteNode(int value){

Node p = headNode;

Node pre = null;

while(p.value!=value&&p.next!=null){

pre = p;

p = p.next;

}

//跳出循环有两种可能:找到要删除的结点了,或者到达末尾了

if(p.value == value){ //说明是找到了

pre.next = p.next;

return true;

}else{ //到了末尾还没有,返回异常

return false;

}

}

public void printLRU(){

Node p = headNode;

if(p.next == null) System.out.println("LRU链表当前无结点");

while(p.next!= null){

p = p.next;

System.out.print(p.value+" ");

}

System.out.println();

}

}

public class Node {

int value=-1;

Node next=null;

public Node(int value,Node next){

this.value = value;

this.next = next;

}

public Node(int value){

this.value = value;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值