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

网站台做计么呢邢台天九建设有限公司网站

网站台做计么呢,邢台天九建设有限公司网站,宁波在线网,企业服务账号关于LRU缓存 LRU - Lease Recently Used 最近使用 如果内存优先#xff0c;只缓存最近使用的#xff0c;删除 ‘沉睡’ 数据 核心 api: get set 分析 使用哈希表来实现, O(1)必须是有序的#xff0c;常用放在前面#xff0c;沉睡放在后面, 即#xff1a;有序#xff0…关于LRU缓存 LRU - Lease Recently Used 最近使用 如果内存优先只缓存最近使用的删除 ‘沉睡’ 数据 核心 api: get set 分析 使用哈希表来实现, O(1)必须是有序的常用放在前面沉睡放在后面, 即有序可排序这样 {} 不符合要求Map是可以排序的按照设置顺序 class LRUCache {private length: numberprivate data: Mapany, any new Map()constructor(length: number) {if (length 1) throw new Error(invalid length)this.length length}set(key: any, value: any) {const data this.dataif (data.has(key)) {data.delete(key)}data.set(key, value)if (data.size this.length) {// 如果超出了容量则删除 Map 最老的元素const delKey data.keys().next().valuedata.delete(delKey)}}get(key: any): any {const data this.dataif(!data.has(key)) return nullconst value data.get(key)data.delete(key)data.set(key, value) // 保持最新的return value} }const lruCache new LRUCache(2) lruCache.set(1, 1) // { 11 } lruCache.set(2, 2) // { 11, 22 } lruCache.get(1) // 1 {22, 11} lruCache.set(3,3) // {11, 33} lruCache.get(2) // null lruCache.set(4,4) // {33, 44} lruCache.get(1) // null lruCache.get(3) // {44, 33} lruCache.get(4) // 4 {33, 44}不用 Map 如何实现 LRU 缓存 注意有序结合 Object Array将Array改造成双向链表 const obj1 {value: 1, key: a} const obj2 {value: 2, key: b} const obj3 {value: 3, key: c}const data [obj1, obj2, obj3] const map {a: obj1, b: obj2, c: obj3}上述数据结构很精妙 interface IListNode {value: anykey: stringprev?: IListNodenext?: IListNode }export default class LRUCache {private length: numberprivate data: { [key: string]: IListNode } {}private dataLength: number 0private listHead: IListNode | null nullprivate listTail: IListNode | null nullconstructor(length: number) {if (length 1) throw new Error(invalid length)}private moveToTail(curNode: IListNode) {const tail this.listTailif (tail curNode) return// 1. 让 pre next 断绝与 curNode的关系const preNode curNode.prevconst nextNode curNode.nextif (prevNode) {if (nextNode) {preNode.next nextNode} else {delete prevNode.next}}if (nextNode) {if (prevNode) {nextNode.prev prevNode} else {delete nextNode.prev}if (this.listHead curNode) this.listHead nextNode}// 2. 让 curNode 断绝与 prev next的关系delete curNode.prevdelete curNode.next// 3. 在list 末尾重新建立 curNode 的新关系if (tail) {tail.next curNodecurNode.prev tail}this.listTail curNode}private tryClean() {while(this.dataLength this.length) {const head ths.listHeadif (!head) throw new Error(head is null)const headNext head.nextif (!headNext) throw new Error(headNext is null)// 1. 断绝head和next的关系delete headNext.prevdelete head.next// 2. 重新赋值 listHeadthis.listHead headNext// 3. 清理 data, 重新计数delete this.data[head.key]this.dataLength - 1}}get(key: string):any {const data this.dataconst curNode data[key]if (!curNode) return nullif (this.listTail curNode) {reutrn curNode.vlaue}// curNode 移动到末尾this.moveToTail(curNode)}set(key: string, value: any) {const data this.dataconst curNode data[key]if (!curNode) {// 新增数据const newNode: IListNode {key, value}// 移动到末尾this.moveToTail(newNode)data[key] newNodethis.dataLength if (this.dataLength 1) this.listHead newNode} else {// 修改现有数据curNode.value value// 移动到末尾this.moveToTail(curNode)}// 长度超过了则需要清理this.tryClean()} }功能性测试 const lruCache new LRUCache(2) lruCache.set(1, 1) // { 11 } lruCache.set(2, 2) // { 11, 22 } lruCache.get(1) // 1 {22, 11} lruCache.set(3,3) // {11, 33} lruCache.get(2) // null lruCache.set(4,4) // {33, 44} lruCache.get(1) // null lruCache.get(3) // {44, 33} lruCache.get(4) // 4 {33, 44}数据结构设计data 和 list 分别存储什么双向链表的操作非常繁琐代码很容易写错 不易调试链表 node 要存储 node.key, 否则需要遍历 data 删除
http://www.sadfv.cn/news/334612/

相关文章:

  • 网站后台数据分析怎么做网页设计师培训费
  • 云南网站制作公司厦门百度竞价推广
  • 网站做细分领域组织网站建设应该注意什么
  • 一个主做海贼王的网站艺术馆展厅设计
  • 青岛建站模板制作电子商务公司介绍文案
  • 定制开发网站免费网站推荐货源
  • 嘉兴云推广网站上海开发公司
  • 个人建站模板python自学网站
  • 长春电商网站建设报价wordpress后台登陆地址
  • 怎样用jsp做网站 新手教程免费访问国外网站的应用
  • 尚品中国多年专注于高端网站建设wordpress做手机网站
  • 硅藻泥网站怎么做wordpress内容构建器
  • 有哪些网站可以做任务做网站跟桌面程序差别大吗
  • 做网站一年百万移动互联网是以手机等什么设备为终端用无线技术实现相互通信
  • 电子商务网站建设及其相关法律问题网络推广专员是干嘛的
  • 装饰网站建设策划书支付宝手机网站支付二维码怎么做
  • 坪山附近网站建设营销策划公司挣钱吗
  • 建设鲜花网站前的市场分析wordpress评论表情不显示不出来
  • 口碑好的丹阳网站建设石家庄免费做网站
  • 网站备案 营业执照副本诏安县建设局网站
  • 特价网站源码怎么创建网站相册
  • 怎么用html做图片展示网站好的ftp网站
  • 做网站用什么域名比较好国内ip地址代理免费
  • 网页设计网站源代码?a品定制网站开发
  • 国家工信部网站备案查询抖音里做我女朋友网站
  • 做医院网站及微信公众号价格网站优化的公司
  • 太原网站建设电话开通企业网站需要多少钱
  • 网站设计有哪些网站设置支付宝在线支付
  • 网站建设公司兴田德润专业郑州seo外包v1
  • 网站建设搜索优化app推广新闻营销做网站服务器哪个好