在學習lru演算法的時候,看到lrucache原始碼實現是基於linkedhashmap,今天學習一下linkedhashmap的好處以及如何實現lru快取機制的。
lru這個演算法就是把最近一次使用時間離現在時間最遠的資料刪除掉,而實現lrucache將會頻繁的執行插入、刪除等操作,我們就會想到使用linkedlist,但是我們又要基於key-value來儲存資料,這個時候我們就會想起hashmap,但是hashmap不能像linkedlist那樣保留資料的插入順序,如果要使用hashmap的話可以使用它的乙個子類linkedhashmap。
linkedhashmap介紹:
linkedhashmap使用:
因為我們這裡為了實現lru演算法,排序方式 設定為true 訪問順序排序
int initialcapacity = 10;//具體看下效果:初始化容量
float loadfactor = 0.75f;//
載入因子,一般是 0.75f
boolean accessorder = true;//
排序方式 false 基於插入順序 true 基於訪問順序
mapmap = new linkedhashmap<>(initialcapacity, loadfactor, accessorder);
for (int i = 0; i < 10; i++)//訪問前順序
for (iterator> it =map.entryset().iterator(); it.hasnext(); )
//模擬訪問
map.get("5");
//訪問後資料
執行結果發現訪問過的5未知發生了變化 說明是基於訪問排序的。我們接下來再看下如何移除過期的。
finalint initialcapacity = 10;//
初始化容量
float loadfactor = 0.75f;//
載入因子,一般是 0.75f
boolean accessorder = true;//
排序方式 false 基於插入順序 true 基於訪問順序
//mapmap = new linkedhashmap<>(initialcapacity, loadfactor, accessorder);
mapmap = new
linkedhashmap(initialcapacity, loadfactor, accessorder)
};for (int i = 0; i < 15; i++)
//訪問前順序
我們容量定的10個,我們插入15個 我們發現最先插入的五個不見了,說明lru演算法起到效果了。
幹我們這行,啥時候懈怠,就意味著長進的停止,長進的停止就意味著被淘汰,只能往前衝,直到鳳凰涅槃的一天!
java 基礎積累
int x 3510 x x 1000 1000 執行結果為3000 因為整數之間做除法時,只保留整數部分捨棄小數部分 與 與 邏輯與 和 邏輯或 都為邏輯運算子 按位與 和 按位或 都為位運算子 a b a b 為二進位制的與或運算 同為1時為1,否則為0 同為0時為0,否則為1 則 等於 則 等...
gdb積累學習
gdb積累學習 1 檢視當前檔案 通過gdb進行除錯的時候,有的時候因為跳轉的太多,所以不知道已經執行到了哪乙個檔案,這個時候,如果我們想看一下當前檔案的名字,可以使用下面的命令 gdb info source current source file is cdbstatement.cpp comp...
Ubuntu學習積累
步驟如下 解壓 tar zxvf install flash player 11 linux.x86 64.tar.gz 然後發現解壓檔案中只有乙個libflashplayer.so的檔案,然後在網上檢視怎麼去處理這個檔案,提供的方式是直接複製到 usr lib mozilla plugins資料夾...