LRU快取機制

2021-10-06 12:44:39 字數 1165 閱讀 5018

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...