《積累》Java學習之LinkedHashMap

2021-07-15 22:27:54 字數 1722 閱讀 5171

在學習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未知發生了變化 說明是基於訪問排序的。我們接下來再看下如何移除過期的。

final

int 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資料夾...