LRU快取機制(LInkedHashMap實現)

2021-10-11 16:19:57 字數 1300 閱讀 7177

運用你所掌握的資料結構,設計和實現乙個 lru (最近最少使用) 快取機制 。

實現 lrucache 類:

高階:你是否可以在 o(1) 時間複雜度內完成這兩種操作?

示例:輸入

[「lrucache」, 「put」, 「put」, 「get」, 「put」, 「get」, 「put」, 「get」, 「get」, 「get」]

[[2], [1, 1], [2, 2], [1], [3, 3], [2], [4, 4], [1], [3], [4]]

輸出[null, null, null, 1, null, -1, null, -1, 3, 4]

解釋lrucache lrucache = new lrucache(2);

lrucache.put(1, 1); // 快取是

lrucache.put(2, 2); // 快取是

lrucache.get(1); // 返回 1

lrucache.put(3, 3); // 該操作會使得關鍵字 2 作廢,快取是

lrucache.get(2); // 返回 -1 (未找到)

lrucache.put(4, 4); // 該操作會使得關鍵字 1 作廢,快取是

lrucache.get(1); // 返回 -1 (未找到)

lrucache.get(3); // 返回 3

lrucache.get(4); // 返回 4

1、linkedhashmap是有序的,當accessorder為false時,為插入有序(預設);當accessorder為true時,為訪問有序;(linkedhashmap維護乙個雙向鍊錶實現有序)

2、所以我們可以改寫linkedhashmap來實現lru策略;

原始碼:

// 繼承linkedhashmap,根據linkedhashmap的有序性實現lru(訪問有序)

class

lrucache

extends

linkedhashmap

public

intget

(int key)

public

void

put(

int key,

int value)

// 重點,重寫該方法實現lru策略(linkedhashmap一直返回false)

@override

protected

boolean

removeeldestentry

(map.entry

eldest)

}

LRU快取機制

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

LRU快取機制

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

LRU快取機制

lru快取機制 最近最少使用 雙向鍊錶 雜湊表 不使用自帶 linkedhashmap 雙向鍊錶按照被使用的順序儲存了這些鍵值對,靠近頭部的鍵值對是最近使用的,而靠近尾部的鍵值對是最久未使用的。雜湊錶即為普通的雜湊對映 hashmap 通過快取資料的鍵對映到其在雙向鍊錶中的位置。首先使用雜湊表進行定...