日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:27日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品va视频| 夜夜精品视频| 日韩av不卡在线观看| 午夜一级在线看亚洲| 99国产精品一区二区| 日韩中文影院| 久久国产影院| 免费观看不卡av| 亚洲欧美日韩国产| 香蕉久久久久久| 国产日韩精品视频一区二区三区| 日韩av黄色在线| 久久国内精品| 国产一区二区三区国产精品| 久久影院午夜精品| 91精品国产调教在线观看| 精品一区亚洲| 香蕉成人久久| 久久精品97| 色婷婷色综合| 色在线中文字幕| 亚洲特色特黄| 久久亚洲图片| 欧美一区成人| 91嫩草亚洲精品| 午夜精品免费| 亚洲免费观看高清完整版在线观| 日韩精选在线| 成人在线观看免费视频| 99久久精品网站| 快she精品国产999| 欧美日韩亚洲一区在线观看| 国产精品调教| 日韩成人综合| 视频一区在线播放| 蜜臀久久99精品久久久久久9| 日本不卡一二三区黄网| 国产极品嫩模在线观看91精品| 久久精品一区二区国产| 日韩精品网站| 亚洲精品在线国产| 国产精品大片| 久久国产精品成人免费观看的软件| 久久一二三区| 国产精品三级| 国产精品7m凸凹视频分类| 日本a口亚洲| 婷婷国产精品| 777久久精品| 99久久久久| 免费日本视频一区| 成人在线视频免费看| 亚洲综合不卡| 国产videos久久| 美国欧美日韩国产在线播放| 国产成人精品三级高清久久91| 99在线观看免费视频精品观看| 国产精品99精品一区二区三区∴| 999精品一区| 91精品福利观看| 精品一区三区| 久久影院一区二区三区| 国产美女精品| 高清不卡一区| 日韩综合一区二区| 肉色欧美久久久久久久免费看| 午夜性色一区二区三区免费视频| 成人午夜毛片| 欧美综合社区国产| 日韩视频二区| 日韩不卡一区| 欧美一级网址| 久色成人在线| 日韩av一级| 欧美激情 亚洲a∨综合| 免费一区二区视频| 久久久精品午夜少妇| 国产精品99久久免费观看| 丝袜美腿亚洲一区| 亚洲精品一级二级| 国产探花一区| 免费一级片91| 香蕉国产精品| 亚洲免费福利| 久久一区视频| 日韩国产欧美在线视频| 欧美午夜不卡影院在线观看完整版免费| 国产一区二区亚洲| 国产精品一区高清| 日本亚洲视频在线| 亚洲永久字幕| 91精品高清| 999久久久亚洲| 中文字幕在线视频久| 国产精品.xx视频.xxtv| 亚洲欧洲一区| 欧美中文一区二区| 日本免费久久| av资源亚洲| 日本黄色精品| 久久伊人国产| 国产精品15p| 国产欧美在线| 欧美日韩午夜| 日韩中文字幕一区二区高清99| 亚洲美洲欧洲综合国产一区| 亚洲午夜精品久久久久久app| 国产精品不卡| 精品国产一区二| 国产精品qvod| 欧美一区二区三区久久精品| 亚洲欧洲日韩| 色婷婷成人网| 亚洲精品婷婷| 偷拍亚洲精品| 日韩福利在线观看| 日韩av午夜在线观看| 91精品在线免费视频| 久久狠狠久久| 国产黄色精品| 美女在线视频一区| 毛片不卡一区二区| 你懂的亚洲视频| 精品成av人一区二区三区 | 亚洲女同中文字幕| 免费观看不卡av| 在线国产一区二区| 亚洲免费激情| 免费在线观看一区二区三区| 蜜桃av一区二区三区电影| 亚洲精品九九| 日韩av字幕| 国产精品一区二区三区美女| 国产极品模特精品一二 | 久久99蜜桃| 成人在线免费观看91| 丝袜诱惑一区二区| 中文字幕人成乱码在线观看| 电影亚洲精品噜噜在线观看 | 婷婷激情一区| 九色精品91| 亚洲久久一区| 国产精品.xx视频.xxtv| 亚洲精品成人图区| 欧美高清不卡| 亚洲区第一页| 国产日韩三级| 国产成人调教视频在线观看| 亚洲1234区| 欧美专区在线| 日韩国产欧美三级| 国产精品亚洲片在线播放| 国产一区一一区高清不卡| 久久久一二三| 视频在线在亚洲| 国产精品超碰| 久久久噜噜噜| 亚洲深深色噜噜狠狠爱网站| 欧美日本三区| 国产精选在线| 亚洲美洲欧洲综合国产一区| 日本不卡视频一二三区| 久久精品福利| 在线一区免费观看| 国产亚洲字幕| 日韩理论片av| 在线综合亚洲| 国产精品久久久久77777丨| 天堂8中文在线最新版在线| 老鸭窝亚洲一区二区三区| 国产亚洲欧美日韩在线观看一区二区| 久久精品三级| 亚洲专区欧美专区| 欧美国产精品| 欧美日韩少妇| 免费视频一区二区三区在线观看| 久久激情婷婷| 午夜电影一区| 久久精品国内一区二区三区水蜜桃| 在线精品一区二区| 久久免费福利| 最新亚洲激情| 精品亚洲免a| 爽爽淫人综合网网站| 精品久久网站| 三级一区在线视频先锋| 久久中文字幕一区二区三区| 亚洲一区二区三区高清| 久久亚洲精品中文字幕| 在线综合欧美| 成人在线超碰| 亚洲精品自拍| 久久久精品午夜少妇| 国产午夜精品一区在线观看| 91精品观看| 国产在线日韩精品| 日韩精品一卡二卡三卡四卡无卡| 日韩av片子| 欧美视频久久| 亚洲激情国产|