首页 > 编程知识 正文

hrrn算法,缓存淘汰算法

时间:2023-05-03 19:11:19 阅读:127861 作者:172

LRU缓存算法(最近最少使用的)由哈希表中的双向链表实现

package com.base.cache; import java.util.*; /** * LRU (最近最低使用(**@authorleon ) @date2021年11月08日19336037 )/publicclasslruk,vimplementsiterablev { classdlinkednoooon DLinkedNodeK,V pre; DLinkedNodeK,V next; publicdlinkednode(kk,vvv ) { key=k; value=v; } }私密hashmapk、DLinkedNodeK、V cacheMap; 私密空间; //该两端链表的头尾节点均为阳极专用链接节点、v头、tail; PublicLRU(intcapacity ) { this.capacity=capacity; //虚拟节点head=new DLinkedNodeK,v(null,null ); tail=new DLinkedNodeK,v(null,null ); cacheMap=new HashMap (; head.next=tail; head.pre=null; tail.pre=head; tail.next=null; }公共语音集(kkey,V value ) if (cache map.contains key ) key ) ({ DLinkedNodeK,vnode=cachemap.get ) key ); 移除节点(节点; } DLinkedNodeK,vnode=newdlinkednode(key,value ); if (cache map.size (=this.capacity ) removenode ) this.tail.pre ); chemap.remove(key; }添加头(节点); }publicvget(kkey ) if (! cachemap.containskey(key ) ) { return null; } DLinkedNodeK,vnode=cachemap.get(key ); 移除节点(节点; 添加头(节点; return node.value; }/* * * remove current node * * @ param node */privatevoidremovenode (DLinkedNodeK,V node ) /当前节点dlinkednodek,vPRE=pre.next=next; next.pre=pre; chemap.remove(node.key ); }/* * * addanodetolinkedlisthead * * @ param node */privatevoidaddtohead (dlinkednodek,V node ) { node.pre=this.heaad this.head.next.pre=node; this.head.next=node; chemap.put(node.key,node ); } @ overridepubliciteratorviterator () { return new IteratorV ) { private DLinkedNodeK,V cur=head.next; @Override public boolean hasNext () { return cur!=nullcur.value!=null; } @Override public V next () { DLinkedNodeK,V node=cur; cur=cur.next; return node.value; }; } publicstaticvoidmain (string [ ] args ) { LRUInteger,Integer lru=new LRU(3) 3; LRU.set (1,1 ); LRU.set (2,2 ); LRU.set (3,3 ); LRU.set (4,4 ); LRU.set (5,5; LRU.set (4,6 ); for(integerI:LRU ) system.out.println ) I; } }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。