电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

淺談Java如何實現一個基于LRU時間復雜度為O(1)的緩存

瀏覽:3日期:2022-08-27 15:14:09

LRU:Least Recently Used最近最少使用,當緩存容量不足時,先淘汰最近最少使用的數據。就像JVM垃圾回收一樣,希望將存活的對象移動到內存的一端,然后清除其余空間。

緩存基本操作就是讀、寫、淘汰刪除。

讀操作時間復雜度為O(1)的那就是hash操作了,可以使用HashMap索引 key。

寫操作時間復雜度為O(1),使用鏈表結構,在鏈表的一端插入節點,是可以完成O(1)操作,但是為了配合讀,還要再次將節點放入HashMap中,put操作最優是O(1),最差是O(n)。

不少童鞋就有疑問了,寫入時又使用map進行了put操作,為何緩存不直接使用map?沒錯,首先使用map存儲了節點數據就是采用空間換時間,但是淘汰刪除不好處理,使用map如何去記錄最近最少使用(涉及到時間、頻次問題)。so,使用鏈表可以將活躍節點移動到鏈表的一端,淘汰時直接從另一端進行刪除。

public class LruCache<K,V> {/** 這里簡單點直接初始化了*/ private int capacity = 2; private int size = 0; private HashMap<K,DoubleListNode<K,V>> cache = new HashMap<>(capacity); private DoubleListNode<K,V> lruNode = new DoubleListNode<K, V>(null,null,null,null); private DoubleListNode<K,V> mruNode = new DoubleListNode<K, V>(null,null,null,null); public V get(K key){ DoubleListNode<K,V> target = cache.get(key); if (target == null) { return null; } /** 使用過就移動到右側 */ move2mru(target); return target.value; } public void put(K key,V value){ if(cache.containsKey(key)){ DoubleListNode<K,V> temp = cache.get(key); temp.value = value; /** 使用過就移動到右側 */ move2mru(temp); return; }/** 容量滿了清除左側 */ if(size >= capacity){ evict4lru(); } DoubleListNode<K,V> newNode = new DoubleListNode<>(mruNode,null,key,value); if(size == 0){ lruNode.next = newNode; } mruNode.next = newNode; mruNode = newNode; cache.put(key,newNode); size++; } private void move2mru(DoubleListNode<K,V> newMru){ DoubleListNode<K,V> pre = newMru.pre; DoubleListNode<K,V> next = newMru.next; pre.next = next; newMru.pre = mruNode; mruNode.next = newMru; mruNode = newMru; } private void evict4lru(){ cache.remove(lruNode.next.key); lruNode.next = lruNode.next.next; size--; } public String toString(){ StringBuffer sb = new StringBuffer('lru -> '); DoubleListNode<K,V> temp = lruNode; while(temp!=null){ sb.append(temp.key).append(':').append(temp.value); sb.append(' -> '); temp = temp.next; } sb.append(' -> mru '); return sb.toString(); } public static void main(String[] args) { LruCache<String,String> cache = new LruCache<>(); cache.put('1','1'); System.out.println(cache); cache.get('1'); cache.put('2','2'); System.out.println(cache); cache.put('3','3'); System.out.println(cache); cache.put('4','4'); System.out.println(cache); }}class DoubleListNode<K,V>{ K key; V value; DoubleListNode<K,V> pre; DoubleListNode<K,V> next; public DoubleListNode(K key,V value){ this.key = key; this.value = value; } public DoubleListNode(DoubleListNode<K,V> pre,DoubleListNode<K,V> next,K key,V value){ this.pre = pre; this.next = next; this.key = key; this.value = value; }}

這里使用鏈表,及HashMap完成了基于LRU的緩存,其中HashMap主要用來快速索引key,鏈表用來完成LRU機制。當然尚有許多不足,包括緩存移除remove,緩存ttl,線程安全等。

到此這篇關于淺談Java如何實現一個基于LRU時間復雜度為O(1)的緩存的文章就介紹到這了,更多相關Java基于LRU時間復雜度為O(1)的緩存內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | 影像测量仪_三坐标测量机_一键式二次元_全自动影像测量仪-广东妙机精密科技股份有限公司 | 沈阳楼承板_彩钢板_压型钢板厂家-辽宁中盛绿建钢品股份有限公司 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | 壹作文_中小学生优秀满分作文大全 | 手板_手板模型制作_cnc手板加工厂-东莞天泓 | 东莞海恒试验仪器设备有限公司 | 超声骨密度仪-骨密度检测仪-经颅多普勒-tcd仪_南京科进实业有限公司 | 光纤测温-荧光光纤测温系统-福州华光天锐光电科技有限公司 | 海日牌清洗剂-打造带电清洗剂、工业清洗剂等清洗剂国内一线品牌 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 | 精密五金冲压件_深圳五金冲压厂_钣金加工厂_五金模具加工-诚瑞丰科技股份有限公司 | 活性炭-蜂窝-椰壳-柱状-粉状活性炭-河南唐达净水材料有限公司 | 泰安办公家具-泰安派格办公用品有限公司 | 膏方加工_丸剂贴牌_膏滋代加工_湖北康瑞生物科技有限公司 | 万博士范文网-您身边的范文参考网站Vanbs.com | 济南品牌包装设计公司_济南VI标志设计公司_山东锐尚文化传播 | 【同风运车官网】一站式汽车托运服务平台,验车满意再付款 | 执业药师报名时间,报考条件,考试时间-首页入口 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | 超声波清洗机_细胞破碎仪_实验室超声仪器_恒温水浴-广东洁盟深那仪器 | 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | 焦作网 WWW.JZRB.COM| 采暖炉_取暖炉_生物质颗粒锅炉_颗粒壁炉_厂家加盟批发_烟台蓝澳采暖设备有限公司 | 行业分析:提及郑州火车站附近真有 特殊按摩 ?2025实地踩坑指南 新手如何避坑不踩雷 | 黄石妇科医院_黄石东方女子医院_黄石东方妇产医院怎么样 | 烟气换热器_GGH烟气换热器_空气预热器_高温气气换热器-青岛康景辉 | 登车桥动力单元-非标液压泵站-非标液压系统-深圳市三好科技有限公司 | 注塑模具_塑料模具_塑胶模具_范仕达【官网】_东莞模具设计与制造加工厂家 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 离子色谱自动进样器-青岛艾力析实验科技有限公司 | 百度爱采购运营研究社社群-店铺托管-爱采购代运营-良言多米网络公司 | 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | 混合生育酚_醋酸生育酚粉_琥珀酸生育酚-山东新元素生物科技 | 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 自清洗过滤器,浅层砂过滤器,叠片过滤器厂家-新乡市宇清净化 | 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | 浙江筋膜枪-按摩仪厂家-制造商-肩颈按摩仪哪家好-温州市合喜电子科技有限公司 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 | 中图网(原中国图书网):网上书店,尾货特色书店,30万种特价书低至2折! | 北京宣传片拍摄_产品宣传片拍摄_宣传片制作公司-现像传媒 |