LRU缓存淘汰算法

缓存

缓存是非常常见的东西,比如cpu缓存,内存缓存。所有的缓存都是为了提高效率的。实际上就是当用户访问时可以直接从缓存中读取数据。
缓存总会有数据存满的时候,那么缓存满了之后如何去删除老的数据呢。
这个时候的算法常见的有三种
FIFO:first in first out 先进先出。先存储进来的先删除
LRU:Least Recently Used 最近最少使用策略
LFU: least frequently used 最少使用策略

以下是使用单链表实现LRU缓存淘汰算法

public class HashSetMisunderstanding {
    public static void main(String[] args) {
        new HashSetMisunderstanding().judgeList();
    }
    public void judgeList(){
        Set<A> list = new HashSet<A>();//这里创建一个hashset集合
        for(int i=1;i<4;i++){
            A a = new A(1,1);//循环中创建新的对象A来存储相同的数据
            list.add(a);
        }
        for(int i=2;i<6;i++){
            A a= new A(1,1);
            if(list.add(a)){//判断是否能存储进去
                System.out.println("添加成功->"+i);
            }
        }
        for(A a:list){
            System.out.println(a.toString());//打印出相应的值 看看是否唯一
        }
    }

    class A implements Serializable {
        private static final long serialVersionUID = 1L;
        private Integer mi;
        private Integer bi;

        public A() {
            super();
        }
        public A(Integer mi, Integer bi) {
            super();
            this.mi = mi;
            this.bi = bi;
        }
        public Integer getMi() {
            return mi;
        }
        public Integer getBi() {
            return bi;
        }
        public void setMi(Integer mi) {
            this.mi = mi;
        }
        public void setBi(Integer bi) {
            this.bi = bi;
        }
        @Override
        public String toString() {

            return (mi==null?mi:mi.toString())+"--"+(bi==null?bi:bi.toString());
        }
    }
}

public class Node implements Comparable<Node> {
    private int data;
    private Node next;

    @Override
    public String toString() {
        return "Node{" +
                "data=" + data +
                ", next=" + next +
                '}';
    }

    @Override
    public boolean equals(Object obj) {
        Node n = (Node) obj;
        return n.getData()==this.data;
    }

    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {

        this.next = next;
    }

    public int compareTo(Node o) {
        return this.data - o.getData();
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容