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

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

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

瀏覽:30日期: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久久,三上悠亚国产精品一区二区三区
美女久久久久久| 青青草国产成人99久久| 麻豆一区在线| 国产日韩视频在线| 国产日韩欧美一区| 国产精品毛片aⅴ一区二区三区| 91精品尤物| 国产欧美日韩视频在线| 国产精品激情电影| 精品免费在线| 亚洲精品成人图区| 高清在线一区| 久久国产欧美| 99pao成人国产永久免费视频| 在线亚洲激情| 无码日韩精品一区二区免费| 欧美精品中文| 国产精品亚洲欧美日韩一区在线 | 亚洲欧洲一区二区天堂久久| 国精品一区二区三区| 婷婷六月综合| 亚洲欧美网站在线观看| 国产日产精品一区二区三区四区的观看方式 | yellow在线观看网址| 日韩欧美中文| 国产精品丝袜xxxxxxx| 亚洲bt欧美bt精品777| 国产精品va| 欧美日韩色图| 亚洲人成亚洲精品| 久久99蜜桃| 国产传媒在线观看| 美女国产一区| 精品一区二区三区视频在线播放| 中文字幕系列一区| 亚洲精品亚洲人成在线观看| 牛牛精品成人免费视频| 久久人人99| 青草av.久久免费一区| 久久精品国产网站| 黄页网站一区| 国产精品久久久久久妇女| 韩国三级一区| 亚洲综合色婷婷在线观看| 久久的色偷偷| 激情欧美亚洲| 欧美亚洲国产日韩| 日韩毛片在线| 欧美一区二区三区久久精品| 91精品亚洲| 久久国产精品免费一区二区三区| 桃色一区二区| 日本成人在线不卡视频| 不卡福利视频| 一区二区国产在线| 国产一二在线播放| 日韩精品一区第一页| 国产成人精品福利| 亚洲免费观看高清完整版在线观| 水蜜桃久久夜色精品一区| 在线一区二区三区视频| 在线天堂资源www在线污| 亚洲aa在线| 99国产精品免费视频观看| 欧美日韩 国产精品| 黄色不卡一区| 久久久久97| 亚欧成人精品| 国产主播一区| 欧美成a人片免费观看久久五月天| 伊人久久亚洲热| 荡女精品导航| 日本在线观看不卡视频| 99精品美女| 精品亚洲自拍| 日韩精品高清不卡| 亚洲黄页一区| 日韩成人亚洲| 国产激情欧美| 亚洲精品在线二区| 一级欧洲+日本+国产| 国产不卡精品| 国产免费播放一区二区| 中文无码日韩欧| 国产综合激情| av高清不卡| 精品三区视频| 国产亚洲精品美女久久久久久久久久| 国产精品嫩草99av在线| 国产h片在线观看| 国产精品久久久久久av公交车| 国产视频一区在线观看一区免费| 国产自产自拍视频在线观看| 久久丁香四色| 国产私拍福利精品视频二区| 一本综合精品| 六月天综合网| 女同性一区二区三区人了人一| 91一区二区| 麻豆成人91精品二区三区| 欧美永久精品| 日韩精品第二页| 日韩一区二区三区四区五区| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美日韩高清| 激情久久婷婷| 美女亚洲一区| 国产专区一区| 激情91久久| 红桃视频亚洲| 欧美日韩视频| 9国产精品视频| 欧美精品自拍| 欧美日韩国产一区精品一区| 999久久久精品国产| 日韩高清中文字幕一区二区| 午夜av不卡| 久久久噜噜噜| 精品日韩毛片| 欧美资源在线| 日韩精品一级二级 | 日韩高清不卡在线| 日本欧美在线| 国产日产精品_国产精品毛片 | 97精品国产一区二区三区| 国产一区国产二区国产三区| 高清精品久久| 色天使综合视频| 久久久精品日韩| 欧美日韩日本国产亚洲在线 | 欧美午夜不卡| 亚洲天堂日韩在线| 国产亚洲字幕| 麻豆精品国产91久久久久久| zzzwww在线看片免费| 色婷婷精品视频| 午夜久久美女| 中文视频一区| 国产欧美日本| 精品久久久久久久| 欧美成人精品三级网站| 国产伊人精品| 亚洲人亚洲人色久| 国产精品久久久久久久久久妞妞 | 午夜在线精品| 亚州精品视频| 国产精品久久| 韩国精品主播一区二区在线观看| 欧美特黄一级| 欧美亚洲福利| 日韩精品电影| 伊人久久大香伊蕉在人线观看热v| 国产欧美高清视频在线| 福利欧美精品在线| 国精品一区二区三区| 亚洲不卡视频| 精品久久在线| 亚洲一区国产一区| 国产精品任我爽爆在线播放| 成人福利视频| 玖玖玖国产精品| 国产精品.xx视频.xxtv| 欧美中文字幕一区二区| 日韩中文字幕无砖| 91亚洲国产高清| 久久午夜影视| 国产精品15p| 欧美日韩国产欧| 国产精品色在线网站| 亚洲成人av观看| 亚洲乱码一区| 鲁鲁在线中文| 亚洲精品乱码| 极品av在线| 中文字幕一区二区av| 久久三级中文| 99在线精品免费视频九九视| 国产精品欧美日韩一区| 久久国产电影| 国产麻豆一区二区三区| 激情综合网站| 欧美精品97| 亚洲综合不卡| 国产成人精品三级高清久久91| 99综合视频| 精品久久电影| 少妇精品久久久| 国产综合欧美| 精品视频网站| 日韩高清欧美激情| 亚洲天堂久久| 国产精品免费99久久久| 99国产精品自拍| 国产一区三区在线播放| 蜜臀久久99精品久久久久宅男| 岛国av在线网站| 91精品国产自产在线丝袜啪| 婷婷色综合网| 色爱综合网欧美| 日本欧美久久久久免费播放网|