lru快取機制(最近最少使用)
雙向鍊錶 + 雜湊表(不使用自帶 linkedhashmap)
雙向鍊錶按照被使用的順序儲存了這些鍵值對,靠近頭部的鍵值對是最近使用的,而靠近尾部的鍵值對是最久未使用的。
雜湊錶即為普通的雜湊對映(hashmap),通過快取資料的鍵對映到其在雙向鍊錶中的位置。
首先使用雜湊表進行定位,找出快取項在雙向鍊錶中的位置,隨後將其移動到雙向鍊錶的頭部,
具體的方法如下:
對於 get 操作,首先判斷 key 是否存在:
對於 put 操作,首先判斷 key 是否存在:
(在雙向鍊錶中使用偽頭部和偽尾部標記界限,這樣在新增和刪除的時候就不用判斷相鄰節點是否存在)
public
class
lrucache
public
doublelinkednode
(int key,
int value)
}private map
cache =
newhashmap
<
>()
;private
int size, capacity;
private doublelinkednode head, tail;
public
lrucache
(int capacity)
public
intget
(int key)
else
}public
void
put(
int key,
int value)
}else
}public
void
removenode
(doublelinkednode node)
public
void
addtohead
(doublelinkednode node)
public
void
movetohead
(doublelinkednode node)
public doublelinkednode removetail()
}
LRU快取機制
運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料 put key,value 如果金鑰不存在,則寫入其資料值。...
LRU快取機制
運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料 put key,value 如果金鑰不存在,則寫入其資料值。...
LRU快取機制
lru快取機制 leetcode 146 題 運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果關鍵字 key 存在於快取中,則獲取關鍵字的值 總是正數 否則返回 1。寫入資料 put k...