当前位置: 首页 > news >正文

桂林北站地址建筑工程与土木工程区别

桂林北站地址,建筑工程与土木工程区别,seo won jin,淮安市工程造价信息网LRU: LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。 核心思想: 基于Map实现k-v存储,双向链表中使用一个虚拟头部和虚拟尾部,虚拟头部的…

LRU:

LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。

核心思想:

基于Map实现k-v存储,双向链表中使用一个虚拟头部和虚拟尾部,虚拟头部的下一个结点是链表第一个结点,虚拟尾部的前一个结点是链表最后一个结点。每次查询、新增、修改某个Key时,将key在链表中的位置移动到头部,这样尾部结点就是最近最少使用的,每次容量超限时从尾部删除。get缓存和put缓存操作的时间复杂度都为O(1)

链表结点结构:

class Node{int key;int value;Node next;Node prev;public Node(){next=null;prev=null;}public Node(int key,int value){this.key=key;this.value=value;next=null;prev=null;}}

代码:

假设缓存的kv都为int类型

public class LRUCache {class Node{int key;int value;Node next;Node prev;public Node(){next=null;prev=null;}public Node(int key,int value){this.key=key;this.value=value;next=null;prev=null;}}private int capacity;private HashMap<Integer,Node> cache=new HashMap<>();private Node head,tail;public LRUCache(int capacity) {this.capacity=capacity;head=new Node();tail=new Node();head.next=tail;tail.prev=head;}public int get(int key) {Node node= cache.get(key);if(node==null)return -1;//删除key在链表中的noderemoveNode(node);//将key在链表中的node放到队头addToHead(node);return node.value;}public void put(int key, int value) {Node node =cache.get(key);if(node!=null){//更新valuenode.value=value;//删除key在链表中的noderemoveNode(node);//将key在链表中的node放到队头addToHead(node);}else{Node newNode=new Node(key,value);cache.put(key,newNode);//将key在链表中的node放到队头addToHead(newNode);if(cache.size()>capacity){//容量超过capacityNode remo =tail.prev;cache.remove(remo.key);removeNode(remo);}}}private void removeNode(Node node){node.prev.next=node.next;node.next.prev=node.prev;}private void addToHead(Node node){node.next=head.next;node.prev=head;head.next.prev=node;head.next=node;}public static void main(String[] args) {LRUCache lRUCache = new LRUCache(2);lRUCache.put(1, 1); // 缓存是 {1=1}lRUCache.put(2, 2); // 缓存是 {1=1, 2=2}System.out.println(lRUCache.get(1));    // 返回 1lRUCache.put(3, 3); // 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}System.out.println(lRUCache.get(2));    // 返回 -1 (未找到)lRUCache.put(4, 4); // 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}System.out.println(lRUCache.get(1));    // 返回 -1 (未找到)System.out.println(lRUCache.get(3));    // 返回 3System.out.println(lRUCache.get(4));    // 返回 4}
}

 运行结果:

注:

为什么用双向链表而不是单向链表?

在删除链表操作中,单链表要找到要删除结点的前驱结点时间复杂度就为O(n)了,而用双链表可以在O(1)复杂度上删除结点。

为什么链表节点需要同时存储 key 和 value,而不是仅仅只存储 value

(容量超限)删除缓存时,要根据node的key从Map中找到node,从而将缓存删除。

http://www.yayakq.cn/news/898760/

相关文章:

  • 十堰网站制作公司电话哪些网站教做生物实验
  • 收款后自动发货的网站是怎么做的局域网网页制作工具
  • 凡科代理建站登录wordpress aliyunoss
  • 云南大学网站建设株洲网站排名优化价格
  • dw可以做移动端网站贵州seo排名
  • 网站建设的编程技术宝塔系统怎么建设网站
  • 网站备案多久一次自己开网店需要什么流程
  • html5网站app开发app开发公司价格
  • 印度购物网站排名郑州网站建设与设计
  • 郴州建设信息网站公众号怎么制作文章
  • 宁波创建网站免费商标注册查询
  • 网站模板 chinaz做户外照明有哪些网站
  • 基层网站建设存在困难下载网站模板的软件
  • 网站图片上传却不显示做微信公众号用什么网站
  • 乌海做网站的公司建设摩托车官网商城踏板
  • 网站网站开发的公司电话用asp做的网站打开页面很慢
  • 重庆网站设计总部电子工程专辑
  • 北京建站模板展示wordpress转微信支付
  • 新乡网站建设设计公司哪家好网站在线制作系统
  • 外贸高端网站建设wordpress怎么安装访问不了
  • 山东企业站点seowordpress标签选项卡
  • 企业内部网站建设教程深圳工程交易中心官网
  • 搜索引擎网站开发检查网站收录问题
  • 做网站 阿里云电商网站如何做多语言架构
  • 网站开发工程师应聘书范文1000缤纷网站免费做服装
  • 国家电网交流建设分公司网站网站用户体验诊断
  • 西宁电商网站建设网站开发要怎么学
  • 温州市手机网站制作哪家好wordpress安卓下载
  • 一分钟企业宣传片怎么拍海淀区seo多少钱
  • 公民道德建设网站南阳做网站收费