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

您的位置:首頁技術(shù)文章
文章詳情頁

Java實(shí)現(xiàn)簡單LRU緩存機(jī)制的方法

瀏覽:221日期:2022-09-01 08:59:26

一、什么是 LRU 算法

就是一種緩存淘汰策略。

計(jì)算機(jī)的緩存容量有限,如果緩存滿了就要刪除一些內(nèi)容,給新內(nèi)容騰位置。但問題是,刪除哪些內(nèi)容呢?我們肯定希望刪掉哪些沒什么用的緩存,而把有用的數(shù)據(jù)繼續(xù)留在緩存里,方便之后繼續(xù)使用。

LRU是Least Recently Used的縮寫,即最近最少使用,是一種常用的頁面置換算法,選擇最近最久未使用的頁面予以淘汰。

二、LRU的使用

LRUCache cache = new LRUCache( 2 /* 緩存容量 */ ); cache.put(1, 1); cache.put(2, 2); cache.get(1); // 返回 1 cache.put(3, 3); // 該操作會使得密鑰 2 作廢

第一步:創(chuàng)建一個(gè)長度為2的LRUCache

Java實(shí)現(xiàn)簡單LRU緩存機(jī)制的方法

第二步:cache.put(1, 1);放入key=1,value=1的數(shù)據(jù)

Java實(shí)現(xiàn)簡單LRU緩存機(jī)制的方法

第三步:cache.put(2,2);放入key = 2,value = 2的數(shù)據(jù)(因?yàn)?剛使用,所有把2移動到前面)

Java實(shí)現(xiàn)簡單LRU緩存機(jī)制的方法

第四步:cache.get(1);獲取key = 1的數(shù)據(jù)(因?yàn)槲覀儎偸褂昧?,所以把1移動到前面)

Java實(shí)現(xiàn)簡單LRU緩存機(jī)制的方法

第五步:cache.put(3,3);放入key = 3,value = 3的數(shù)據(jù)(因?yàn)?剛放進(jìn),所以放前面,又因?yàn)槿萘恐挥?,需要移除原先的1個(gè)。只因key = 2是最近最少使用的(key = 1剛get()過),所以移除2。

Java實(shí)現(xiàn)簡單LRU緩存機(jī)制的方法

三、LRU的實(shí)現(xiàn)機(jī)制

算法:

LRU 緩存機(jī)制可以通過哈希表輔以雙向鏈表實(shí)現(xiàn),我們用一個(gè)哈希表和一個(gè)雙向鏈表維護(hù)所有在緩存中的鍵值對。

1)雙向鏈表按照被使用的順序存儲了這些鍵值對,靠近頭部的鍵值對是最近使用的,而靠近尾部的鍵值對是最久未使用的。

2)哈希表即為普通的哈希映射(HashMap),通過緩存數(shù)據(jù)的鍵映射到其在雙向鏈表中的位置。

一、初始化:

Java實(shí)現(xiàn)簡單LRU緩存機(jī)制的方法

二、cache.put(1,1):

Java實(shí)現(xiàn)簡單LRU緩存機(jī)制的方法

三、cache.put(2,2):

Java實(shí)現(xiàn)簡單LRU緩存機(jī)制的方法

四、cache.get(1):

Java實(shí)現(xiàn)簡單LRU緩存機(jī)制的方法

五、cache.put(3,3):

Java實(shí)現(xiàn)簡單LRU緩存機(jī)制的方法

四、代碼如下

import java.io.*;import java.util.HashMap;public class test { public static void main(String args[]) throws IOException { LRUCache cache = new LRUCache( 2 /* 緩存容量 */ ); cache.put(1, 1); cache.put(2, 2); cache.get(1); // 返回 1 cache.put(3, 3); // 該操作會使得密鑰 2 作廢 cache.get(2); // 返回 -1 (未找到) cache.put(4, 4); // 該操作會使得密鑰 1 作廢 cache.get(1); // 返回 -1 (未找到) cache.get(3); // 返回 3 cache.get(4); // 返回 4 }}/** * 設(shè)計(jì)和實(shí)現(xiàn)一個(gè) LRU (最近最少使用) 緩存機(jī)制。它應(yīng)該支持以下操作: 獲取數(shù)據(jù) get 和 寫入數(shù)據(jù) put */class LRUCache { private HashMap<Integer,LinkedNode> cache = new HashMap();//方便通過key快速定位結(jié)點(diǎn) private int size; private int capacity; private LinkedNode head,tail; class LinkedNode{ int key; int value; LinkedNode pre; LinkedNode next; } public LRUCache(int capacity) { this.size = 0; this.capacity = capacity; head = new LinkedNode(); tail = new LinkedNode(); head.next = tail; tail.pre = head; } /** * 移除節(jié)點(diǎn) * @param node */ private void removeNode(LinkedNode node) { LinkedNode preNode = node.pre; LinkedNode nextNode = node.next; preNode.next = nextNode; nextNode.pre = preNode; } /** * 添加節(jié)點(diǎn)到頭部 * @param node */ private void addNode(LinkedNode node) { node.pre = head; node.next = head.next; head.next.pre = node; head.next = node; } /** * 將節(jié)點(diǎn)移動到頭部 * @param node */ private void moveToHead(LinkedNode node) { removeNode(node); addNode(node); } /** * 獲取數(shù)據(jù) * @param key * @return */ public int get(int key) { LinkedNode node = cache.get(key); if(node != null) { moveToHead(node); }else{ return -1; } return node.value; } /** * 寫入數(shù)據(jù) * @param key * @param value */ public void put(int key, int value) { LinkedNode node = cache.get(key); //存在 if(node != null) { node.value = value;//可能更新數(shù)據(jù) moveToHead(node); } //不存在 else{ LinkedNode newNode = new LinkedNode(); newNode.key = key; newNode.value = value; cache.put(key,newNode);//更新Map addNode(newNode);//添加結(jié)點(diǎn)到頭部 size++;//更新結(jié)點(diǎn)數(shù) if(size > capacity) {//如果結(jié)點(diǎn)數(shù)超過容量大小LinkedNode tailPre = tail.pre;cache.remove(tailPre.key);//更新MapremoveNode(tailPre);//刪除最后一個(gè)結(jié)點(diǎn)(尾結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn))size--; } } }}

總結(jié):自己實(shí)現(xiàn)的簡單LRU總歸太簡單了,要是想完善或者實(shí)現(xiàn)更真實(shí)的LRU,不妨參考一下Redis中的LRU。(◔◡◔)

到此這篇關(guān)于Java實(shí)現(xiàn)簡單LRU緩存機(jī)制的方法的文章就介紹到這了,更多相關(guān)Java LRU緩存內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
好看不卡的中文字幕| 国产精品theporn| 国产精品美女| 久久国内精品| 黄色亚洲大片免费在线观看| 麻豆视频久久| 欧美特黄一区| 一本大道色婷婷在线| 欧美日韩网址| 亚洲色诱最新| 午夜精品亚洲| 欧美日韩国产高清电影| a天堂资源在线| 91成人在线精品视频| 偷拍亚洲精品| 亚洲精品影视| 日韩久久一区| 欧美久久一区二区三区| 好吊视频一区二区三区四区| 日韩在线视频精品| 国产夫妻在线| 久久久成人网| 欧美福利在线| 欧美二区视频| 丝袜美腿亚洲色图| 在线免费观看亚洲| 青青在线精品| 国产精品任我爽爆在线播放 | 久久青草久久| 日韩精品看片| 伊人影院久久| 亚洲福利国产| 亚洲国产一区二区在线观看 | 国产精品一区二区av交换| 91精品国产自产在线丝袜啪| 国产网站在线| 99精品一区| 老鸭窝毛片一区二区三区| 日韩在线网址| 日韩.com| 亚洲制服一区| 国产suv精品一区二区四区视频 | 日韩高清不卡在线| 韩国久久久久久| 丝袜国产日韩另类美女| 99热免费精品| 涩涩涩久久久成人精品| 久久精品理论片| 亚洲在线免费| 久久在线91| 蜜桃av一区二区三区电影| 欧美日韩国产一区二区在线观看| 国产成人精品999在线观看| 亚洲资源av| 国产在线观看www| 久久久久久久久久久9不雅视频| 蜜臀av一区二区在线免费观看 | 久久精品天堂| 日韩黄色大片| 国产情侣一区在线| 快she精品国产999| 国产一区二区三区免费在线 | 国内精品伊人| 美女国产一区| 久久国产日韩| 麻豆视频在线看| 中文字幕免费一区二区| 国产成人精品一区二区三区免费| 亚洲va久久| 久久福利影视| 亚洲精品网址| 日韩影院二区| 韩国一区二区三区视频| 午夜电影亚洲| 美女毛片一区二区三区四区| 中文在线免费视频| 国产精品99久久久久久董美香| 久久午夜影视| 香蕉久久国产| 免费在线观看精品| 日韩精品国产欧美| 久久国产精品色av免费看| 亚洲精品高潮| 久久精品国产久精国产爱| 亚洲天堂资源| 亚洲黄色在线| 国产欧美日韩综合一区在线播放| 精品视频国产| 国产一区清纯| 日本一不卡视频| 国产91欧美| 亚洲涩涩av| 久久伊人久久| 一本一本久久| 精品国产网站| 免费国产自线拍一欧美视频| 人人精品久久| 欧美亚洲日本精品| 日本欧美不卡| 国产精品黄网站| 99riav1国产精品视频| 精品一区二区三区免费看| 欧美91精品| 精品国产午夜| 日欧美一区二区| 五月天综合网站| 国产一区二区精品久| 日本亚洲最大的色成网站www| 999久久久亚洲| 久久狠狠亚洲综合| 日韩中文字幕91| 精品久久电影| 中文字幕亚洲精品乱码| 日韩一区自拍| 精品日本视频| 国产精品亚洲产品| 涩涩涩久久久成人精品| 亚洲女同中文字幕| 亚洲91久久| 日本欧美不卡| 日韩免费一区| 999国产精品| 亚洲先锋成人| 欧美日韩黑人| 亚洲午夜在线| 91精品国产成人观看| 麻豆久久久久久| 国产探花在线精品| 国产精品伊人| 毛片不卡一区二区| 国产亚洲电影| 四虎精品永久免费| 亚洲日本欧美| 日韩高清国产一区在线| 中文字幕日韩亚洲| 亚洲免费专区| 日韩精品一区二区三区中文| 91精品丝袜国产高跟在线| 91麻豆精品激情在线观看最新| 欧美在线不卡| 精品网站999| 久久久9色精品国产一区二区三区| 国产一区二区三区四区五区传媒| 国产精品nxnn| 国产精品国产三级国产在线观看| 日韩欧美精品| 日本 国产 欧美色综合| 日韩和欧美一区二区| 国产精品九九| 国产精品福利在线观看播放| 亲子伦视频一区二区三区| 国产亚洲精品自拍| 国产精品一区二区免费福利视频| 国产66精品| 日韩中文字幕麻豆| 捆绑调教美女网站视频一区| 日韩av一级| 亚洲欧美日韩视频二区| 久久最新视频| 97欧美在线视频| 一区二区电影在线观看| 精品亚洲二区| 免费看精品久久片| 国产精品99一区二区三区| 在线综合欧美| 免费日韩一区二区三区| 亚洲一级影院| 国产欧美三级| 视频在线观看国产精品| 国产成人a视频高清在线观看| 亚洲激精日韩激精欧美精品| 欧美国产极品| 久久久久久久久99精品大| 日韩国产91| 视频一区二区中文字幕| 麻豆国产精品| 天堂久久av| 亚洲激情偷拍| 97se综合| 日本91福利区| 蜜桃成人精品| 久久精品一区二区国产| 久久av一区二区三区| 神马午夜在线视频| 欧美日韩xxxx| 欧美特黄一区| 国产在线日韩精品| 亚洲久久一区| 在线视频精品| 成人污污视频| 国产欧美日韩视频在线| 日韩视频二区| 高清日韩中文字幕| 国产日韩欧美高清免费| 国产色综合网| 欧美日韩国产一区二区三区不卡 | 999国产精品视频| 91一区二区三区四区| 麻豆亚洲精品| 亚洲一二三区视频|