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

网站推广搜索嘉兴seo外包公司

网站推广搜索,嘉兴seo外包公司,wordpress引用css,ui页面设计公司请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 …

请你设计并实现一个满足  LRU (最近最少使用) 缓存 约束的数据结构。

实现 LRUCache 类:

  • LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存
  • int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。
  • void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组 key-value 。如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。

函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。

由于我们在维护key-value键值对的同时,还要注意它们的入队顺序,所以用普通的Map肯定是不行的(因为我亲身体验过)

       所以我们需要一个可以自动的维护顺序的数据结构才能处理本题,所以LinikedHashMap肯定是最好的选择,在我们在刷题的时候,其实LinkedHashMap其实是不太常见的,先在这里给大家科普一下:

       LinkedHashMap是一种集合类型,它实现了Map接口,并且通过双向链表维护了插入顺序或者访问顺序,与常规的HashMap相比,LinkedHashMap保持了键值对的插入顺序或访问顺序,这使得它非常适合在按需要按照顺序访问元素的场景中使用

所以要手动的去构建一个结构体,构造方法必不可少

     LinkedHashMap<Integer,Integer> map=new LinkedHashMap<>();private int capacity;//容量public LRUCache(int capacity) {this.capacity=capacity;}

       在我们使用的过程中,对于最新访问的key-value,我们无需对其顺序进行改变,但是如果我们去访问了一个比较使用时间过长的key-value,那么每次都要对其键值进行删除增加,这给代码带来非常差的可读性,所以我们应该重新声明一个方法(最近使用recently)

   public void recently(int key){int val=map.get(key);map.remove(key);map.put(key,val);}

       通过key值去获得value的值,如果没有的话直接返回-1,获取值也是一种操作,证明这个key是刚使用过的,所以直接调用函数recnetly()

    public int get(int key) {if(!map.containsKey(key)){return -1;}recently(key);return map.get(key);}

       如果往进put的时候,如果map的key的数量超过capacity,那就直接删除最早进来的key(很久没有使用的key值),直接提升为最近使用,如果没有直接加入

 public void put(int key, int value) {if(map.containsKey(key)){map.put(key,value);recently(key);return;}if(map.size()>=capacity){map.remove(map.keySet().iterator().next());}map.put(key,value);}

在这里给大家着重说明一下keySet().iterator().next()的功能:

keySet():返回LinkedHashMap中的所有键的集合,该方法将返回一个Set的对象,其中包含所有的键

iterator():返回一个迭代器,用于遍历集合中的元素,在这种情况下,我们获取到的是键集合的迭代器,以便逐个访问键

next():迭代器的方法之一,用于获取下一个元素,由于我们希望获得第一个键,所以该操作将返回集合中的第一个元素

       用迭代器遍历集合,当集合初始值不为空时,遍历的过程中是不会抛出异常的,因为集合遍历时用的fail-safe机制,每次遍历的时候,都是拿的原集合一个快照进行遍历,如果当遍历的时候有人对集合进行增删,结果可能就出现了问题

源码借鉴:

  LinkedHashMap<Integer,Integer> map=new LinkedHashMap<>();private int capacity;public LRUCache(int capacity) {this.capacity=capacity;}public int get(int key) {if(!map.containsKey(key)){return -1;}recently(key);return map.get(key);}public void put(int key, int value) {if(map.containsKey(key)){map.put(key,value);recently(key);return;}if(map.size()>=capacity){map.remove(map.keySet().iterator().next());}map.put(key,value);}public void recently(int key){int val=map.get(key);map.remove(key);map.put(key,val);}

http://www.tj-hxxt.cn/news/56425.html

相关文章:

  • 公司网站简介做app推广去哪找商家
  • 大型做网站的公司应用商店app下载
  • 常州做网站优化互联网培训机构排名前十
  • 新疆网app云南seo网站关键词优化软件
  • 自己的网站怎么做优化西安seo管理
  • 建设通网站联系电话互联网优化
  • 免费的ppt模板网站有哪些谷歌排名网站优化
  • 无忧网站建设服务东莞疫情最新数据
  • 网站建设外包名词解释产品关键词大全
  • 做网站需要用什么语言天津百度seo推广
  • 团队如何分工做网站如何在百度上建立网站
  • 做创新方法工作网站企业关键词排名优化哪家好
  • 如何用java做网站界面网站源码
  • 做网站那个php好用短链接在线生成
  • 恒锐奇 做网站现在百度推广有用吗
  • 什么行业愿意做网站品牌营销策划公司
  • vue做社区网站seo指导
  • 织梦做响应式网站深圳网络推广团队
  • 网站建设和风险分析百度推广竞价排名
  • 网站备案找回品牌定位
  • 集团网站群建设方案网络营销策划方案怎么做
  • 德州哪里做网站app推广渠道
  • 网站优化可以自己做么长沙seo外包优化
  • 亚洲成成品网站有线推广软件的渠道有哪些
  • 模版网站利于优化宁德市有几个区几个县
  • 洛阳航迪科技网站建设公司怎么样网络广告联盟
  • 武汉seo网站推广培训下载百度app并安装
  • 店铺推广和网站优化一起做个人网站怎么做
  • 自己网站做短链接合肥做网站公司哪家好
  • 做兼职网站赚钱吗企业网络营销策划案