首页天道酬勤java中的队列,java队列的使用

java中的队列,java队列的使用

张世龙 05-04 18:17 84次浏览

一、LRU算法介绍

最近最久没有使用算法了

典型的APP应用方案:内存管理中的页面替换算法、缓存销毁中的销毁策略等

二、理论实现

基础结构:双向链表HashMap,双向链表由特定的哈希节点组成。

)1)接入节点时,从原位置删除,插入双向链表头部;

)2)更新节点时,首先删除原始缓存数据,即原始节点,接着更新map映射,然后将更新值作为节点插入链表的开头。 更新后,判断容量是否超过最大存储器使用量

(3)超出后执行淘汰,即删除双向链表的最后一个节点,同时删除映射

)4) LRU实现有频繁的节点搜索和删除,为了节省时间(使用链表搜索目标节点需要遍历)使用HashMap保存关键节点映射关系,o )1)的搜索o ) 1

)5) LRU实现时,频繁插入头部,尾部删除; 因此,必须定义两个节点: head和tail,以便于操作

三.代码

打包缓存; import java.util.HashMap; /**基础结构:双向链表HashMap,双向链表由特定的哈希节点组成。 *接入*p*(1)节点时,从原位置删除,插入双向链表头; *2)更新节点时,删除原始缓存数据(即原始节点)后更新map映射,将更新值作为节点插入链表报头中进行更新后,判断容量是否超过最大存储器使用量*(3) 也就是说,删除双向链表中的最后一个节点,并删除map中的映射*(4)删除在LRU实现中频繁的检索节点。 为了节省时间)使用链表查找目标节点需要遍历),使用HashMap保存关键节点映射关系,然后删除o )1) )5) LRU实现时经常使用头部V val; 节点前节点下一步; 公共节点(kk,V v ) { this.key=k; this.val=v; } }专用节点头; 私密节点标题; 私有hashmapk,节点映射; 私密int maxsize; PublicLrucache(intmaxsize ) { this.maxSize=maxSize; this.map=newHashmap((int ) ) maxSize/0.75 ); this.head.next=tail; this.tail.pre=head; //判断是否存在指定的数据publicvget(kk )//对应的数据if (! map.containskey(k ) ) { return null; //从链表的原始位置删除后,添加到链表开头添加的nodenode=map.get(k ); 移除节点(节点; 添加第一个(节点); 返回节点. val; }公共void put (kk,vvv ) if ) map.containskey ) ) nodenode=map.get ) k; //先删除原始节点removenode(node ) }nodenow=newnode(k,v ); //插入链接列表头addfirst(now ),更新内存映射map.put(k,now ); //确定是否需要丢弃数据if(map.size ) (maxSize ) ({ removeLast ) )//从map中同时删除地图map.remove(k ) } publicvoidredres 节点下一步=node.next; pre.next=next; next.pre=pre; node.pre=null; node.next=null; } publicvoidaddfirst (节点节点) { Node next=head.next; head.next=node; node.pre=head; node.next=next; next.pre=node; }公共节点移除last (() { Node last=tail.pre; 移除节点(last; 返回最后; (四、了解CLH队列参考以下链接

3359 blog.csdn.net/Aesop _ wubo/article/details/7533186

3359 blog.csdn.net/chens sy/article/details/60781148? UTM _ medium=distribute.PC _ relevant.none-task-blog-blogcommendfrommachinelearnpai2-1. channel _ param depth

aqs为什么是双向队列,队列研究中计算暴露组与非暴露