lru快取策略

2022-05-04 03:45:09 字數 1420 閱讀 7563

class

listnode

} class

hlistnode

public

int get(int

key, listnode no)

else

}return -1;

}public

void

delnode(listnode node)

else

else

if (node.next != null

) else

len--;

node.next = null

; node.pre = null

; }

}public

void

addnodebeforehead(listnode node)

if (head == null

) else

}public

void addbeforehead(int key, int

val)

else

len++;

}public listnode ishaskey(int

key)

else

}return

null

; }

public

void

delaftertail()

else

else}}

}public

class

lrucache

/** @param key: an integer

* @return: an integer

*/public

int get(int

key)

return

val;

}/** @param key: an integer

* @param value: an integer

* @return: nothing

*/public

void set(int key, int

value)

if (hnode.len >=capacity)

hnode.addbeforehead(key ,value);

}}

lru規則簡介:

總容量有限,插入時發現已經有這個key了,就需要把這個key  value更新,並且放到最前面。 如果發現容量滿了,那麼就刪除最後的元素。

每次讀取某乙個元素之後就把該元素挪到最前面。

我的思路:

基礎資料結構是雙端鍊錶

然後新建乙個資料結構,裡面有head  tail分別指向雙端鍊錶的頭和尾,len用來表示這個鍊錶的長度,然後寫一些這個資料結構增刪改查的api,就簡單了。

LRU快取策略

為最近最少使用 lru 快取策略設計乙個資料結構,它應該支援以下操作 獲取資料 get 和寫入資料 set 獲取資料get key 如果快取中存在key,則獲取其資料值 通常是正數 否則返回 1。寫入資料set key,value 如果key還沒有在快取中,則寫入其資料值。當快取達到上限,它應該在寫...

134 LRU快取策略

為最近最少使用 lru 快取 策略設計乙個資料結構,它應該支援以下操作 獲取資料 get 和寫入資料 set 獲取資料get key 如果快取中存在key,則獲取其資料值 通常是正數 否則返回 1。寫入資料set key,value 如果key還沒有在快取中,則寫入其資料值。當快取達到上限,它應該在...

快取策略之LRU和LFU

快取,就是把資料儲存在本地,簡單實用key value做乙個對映就好了。但為什麼還要快取策略,因為快取的大小需要限制,否則儲存的東西只增不減,時間一長就有很多記憶體浪費。因為資源總是有限,所以優化,因為優化所以複雜 這個是least recently used的縮寫,即最近最少使用。它的邏輯很簡單 ...