LRU

什么是LRU
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法。也称缓存淘汰算法

如何实现

哈希加双向链表
来保证插入和查找的时间复杂度为o(1)
哈希用于查找
链表用于插入

方法一:调用jdk的LinkedHashMap(这个也是双向链表)

public class LRUTEST extends LinkedHashMap {
    private int capatity;
    public LRUTEST(int capatity){
        super(capatity,0.75F,false);
        this.capatity=capatity;
    }

    @Override
    protected  boolean removeEldestEntry(Map.Entry eldest){

        return super.size()>capatity;
    }
}

方法二,自实现双向链表+哈希

package cn.sunshine.LRU;

import javax.xml.soap.Node;
import java.util.HashMap;
import java.util.Map;

public class LRUCache {

//存储数据的节点Node
    public class Node<K,V>{
     K key;
     V value;
     Node<K,V> pre;
     Node<K,V> next;
     public Node(){
         this.pre=this.next=null;
     }
    public Node(K key,V value){
       this.key=key;
       this.value=value;
       this.pre=this.next=null;
    }
    }
    
//双向链表
 public  class DoubLinkedList<K,V>{
        Node<K,V> head;
        Node<K,V> tail;

        public DoubLinkedList(){
            head=new Node<>();
            tail=new Node<>();
            head.next=tail;
            tail.pre=head;
        }
        public void addHead(Node<K,V> node){
            node.next=head.next;
            node.pre=head;
            head.next.pre=node;
            head.next=node;
        }
        public void romveNode(Node<K,V> node){
            node.next.pre=node.pre;
            node.pre.next=node.next;
            node.pre=null;
            node.next=null;
        }
        public Node getLast(){
            return tail.pre;
        }
    }

    private int  capacity;
    Map<Integer,Node<Integer,Integer>> map;
    DoubLinkedList<Integer,Integer> doubLinkedList;

    public LRUCache(int capacity) {
       this.capacity=capacity;
       map=new HashMap<>();
       doubLinkedList=new DoubLinkedList<>();
    }


    public int get(int key) {
      if (!map.containsKey(key)){
          return -1;
      }
     Node<Integer,Integer> node=map.get(key);
      doubLinkedList.romveNode(node);
      doubLinkedList.addHead(node);
      return node.value;
    }

    public void put(int key, int value) {
      if (map.containsKey(key)){
          Node<Integer,Integer> node=map.get(key);
          node.value=value;
          map.put(key,node);
          doubLinkedList.romveNode(node);
          doubLinkedList.addHead(node);
      }else {
               if (map.size()==capacity){//如果队列已满
                   Node lastNode=doubLinkedList.getLast();
                   map.remove(lastNode.key);
                   doubLinkedList.romveNode(lastNode);
               }
               Node newNode=new Node(key,value);
                map.put(key,newNode);
                doubLinkedList.addHead(newNode);
      }

    }



}


内容概要:《绿色转型美丽乡村——汾渭平原地区低碳乡村案例集》由西安空气侠环保科技有限公司编写,北京市企业家环保基金会支持,聚焦汾渭平原地区乡村低碳发展的典型实践。报告梳理了国内外相关理论研究及政策背景,展示了中央与地方在低碳乡村发展方面的政策措施。通过五个典型案例,包括芮城县庄上村的“光储直柔”模式、铜川耀州区克坊村的“光伏+普惠金融”、浮山县臣南河村的循环经济模式、澄城县权家河村的“风光储一体化”以及麟游县紫石崖村的“光伏+生态养殖”,详细分析了这些案例的技术路线、项目成效、主要政策、典型经验和存在问题。报告总结了清洁能源在乡村低碳发展中的核心地位,强调了因地制宜发展策略的关键作用,并指出了多重效益综合追求的重要性。 适合人群:从事环保、农业、能源领域研究的专业人士,以及关注乡村低碳发展和可持续发展的政策制定者和社会学者。 使用场景及目标:①为全国其他地区开展乡村能源转型实践提供有益的借鉴;②助力推动我国乡村低碳发展,为实现碳达峰、碳中和目标贡献积极力量;③为政策制定者提供决策参考,促进乡村绿色转型和乡村振兴战略的实施。 其他说明:报告由多家单位参编,感谢北京市企业家环保基金会提供资金支持。文中内容及意见仅代表作者的个人观点,与北京市企业家环保基金会的立场或政策无关。报告期望为全国其他地区开展乡村能源转型实践提供有益的借鉴,助力推动我国乡村低碳发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值