LRU快取機制實現

2021-10-24 05:33:12 字數 1444 閱讀 1462

題目描述

設計lru快取結構,該結構在構造時確定大小,假設大小為k,並有如下兩個功能

set(key, value):將記錄(key, value)插入該結構

get(key):返回key對應的value值

[要求]

set和get方法的時間複雜度為o(1)

某個key的set或get操作一旦發生,認為這個key的記錄成了最常使用的。

當快取的大小超過k時,移除最不經常使用的記錄,即set或get最久遠的。

若opt=1,接下來兩個整數x, y,表示set(x, y)

若opt=2,接下來乙個整數x,表示get(x),若x未出現過或已被移除,則返回-1

對於每個操作2,輸出乙個答案

示例1輸入

複製[[1,1,1],[1,2,2],[1,3,2],[2,1],[1,4,4],[2,2]],3

輸出複製

[1,-1]

說明第一次操作後:最常使用的記錄為("1", 1)

第二次操作後:最常使用的記錄為("2", 2),("1", 1)變為最不常用的

第三次操作後:最常使用的記錄為("3", 2),("1", 1)還是最不常用的

第四次操作後:最常用的記錄為("1", 1),("2", 2)變為最不常用的

第五次操作後:大小超過了3,所以移除此時最不常使用的記錄("2", 2),加入記錄("4", 4),並且為最常使用的記錄,然後("3", 2)變為最不常使用的記錄

備註:1 \leq k \leq n \leq 10^51≤k≤n≤10 5

-2 \times 10^9 \leq x,y \leq 2 \times 10^9−2×10

9 ≤x,y≤2×10

9

實現:linkedhashmap

描述:結合了hashmap和linkedlist,在插入時可根據訪問順序排序,每次訪問都會將訪問的資料移到鍊錶最後,也可根據key,value進行查詢

複製**

public static void main(string args)

public static void looplinkedhashmap(linkedhashmaplinkedhashmap)

system.out.println();

}

複製**

注意這裡的構造方法要用三個引數那個且最後的要傳入true,這樣才表示按照訪問順序排序。看一下**執行結果:

111=111 222=222 333=333 444=444

222=222 333=333 444=444 111=111

333=333 444=444 111=111 222=2222

**執行結果證明了兩點:

1、linkedlist是有序的

2、每次訪問乙個元素(get或put),被訪問的元素都被提到最後面去了

LRU快取機制演算法實現

就是一種快取淘汰策略。計算機的快取容量有限,如果快取滿了就要刪除一些內容,給新內容騰位置。但問題是,刪除哪些內容呢?我們肯定希望刪掉哪些沒什麼用的快取,而把有用的資料繼續留在快取裡,方便之後繼續使用。那麼,什麼樣的資料,我們判定為 有用的 的資料呢?lru 快取淘汰演算法就是一種常用策略。lru 的...

LRU快取機制

運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料 put key,value 如果金鑰不存在,則寫入其資料值。...

LRU快取機制

運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料 put key,value 如果金鑰不存在,則寫入其資料值。...