LRU算法(使用自定义双向链表实现)

LRU算法:最近最少使用算法

    核心思想:淘汰掉最近访问次数最少的字块

    举一个例子:假设缓存有4个字块

                  1 2 3 4  此时该四个字块被访问并加载到缓存中,假设此时,cpu第二次访问,访问到3这个字块,LRU算法会把3这个字块置换到序列的最前面,此时,序列顺序变成  3 1 2 4,假设此时,cpu第三次访问,访问了内存当中的第5个字块,但缓存中没有该字块,LRU算法会将该字块加载到缓存,但此时缓存序列已经满了,所以LRU算法则首先会将缓存中最后一个字块(也就是4)淘汰掉,并将第五个字块加到缓存序列的最前面,此时序列变成:5 3 1 2

由于本文重点偏向实现该算法,所以不进行过多理论解释,由于使用的是自定义的链表类,所以代码会有些多,阅读性有所欠缺,但我在核心代码的方法加了必要的说明,建议可以重点看下appendHead方法的实现。

实现代码

1.自定义双向链表类
public class DoubleLinkedQueue<K,V> {
//内部封装Node类,成员变量:键值对(key,value),指向上一个节点的引用(pre),指向下一个节点的引用(next)
     private class Node  
     {
         private K key;
         private V value;
         private Node pre,next;
//内部类构造方法
         public Node( K key,V value) {
             this.key=key;
             this.value=value;
             this.pre=null;
             this.next=null;
         }
        @Override
//链表节点的打印方法
        public String toString() {
            return "Node [key=" + key + ", value=" + value + "]";
        }
        
        
     }
//head记录双向链表的头节点
     private Node head;
tail记录双向链表的尾节点
  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值