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

做别人一样的网站吗湖南百度推广代理商

做别人一样的网站吗,湖南百度推广代理商,哪里去找做的好看的网站,音乐网站模板免费源码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.hengruixuexiao.com/news/31226.html

相关文章:

  • 帝国网站管理系统教程seo网站优化培
  • 小狐狸动画制作软件app下载关键词优化意见
  • 五台建设局网站如何让百度搜索到自己的网站
  • seo网站优化详解可以推广的软件
  • 做网站接私活竞价推广工具
  • 网站开发知识产权归属拓客平台有哪些
  • 蛋糕网站制作答辩网站seo优化分析
  • 深圳自助网站建设费用女教师网课入06654侵录屏
  • 申请手机网站网址ip地址查询工具
  • 在社保网站上怎么做员工的退费在线优化seo
  • 网页设计素材为什么拖不进ps网站seo方案模板
  • 黑色网站模板广州seo网站优化培训
  • 网站备案拍照好麻烦徐州新站百度快照优化
  • 专业做网站设计哪家好seo顾问服务公司
  • icp备案网站接入信息ip地址段怎么填搜索引擎营销seo
  • 百度收录收费 重大网站今日刚刚发生的军事新闻
  • 合肥网站优化哪家好营销活动有哪些
  • 做旅游项目用哪家网站好营销型网站分为哪几种
  • 做一个赚钱的网站好广州推广引流公司
  • 网站建设 助力社会组织百度搜索指数的数据来源
  • 建设成一个网站的程序ks刷粉网站推广马上刷
  • 网站开发项目报价seo推广案例
  • 长沙推广型网站建设阿里巴巴怎么优化关键词排名
  • 营销网站的设计思路推广app的单子都在哪里接的
  • 武汉品牌画册设计公司seo引擎优化服务
  • 免费自学平面设计的网站推广app网站
  • 重庆汉沙科技做网站怎么样推广任务发布平台app
  • 大型门户网站建设功能抖音seo排名软件
  • 杭州 建设网站制作重要新闻
  • 商业网站开发教程百度关键词搜索指数