如果我們想保持地圖的固定大小--3個條目,并在創建新的條目時洗掉最舊的條目,我們如何在恒定時間內做到這一點?(有人告訴我這是可能的)
如果我們做這樣的操作:
如果我們做這樣的操作:
如果我們做這樣的操作
如果我們做這樣的操作:
let cache = new Map()
cache.set('one', 1) 。
cache.set('wo', 2)。
cache.set('three', 3) 。
cache.set('二', '二')。
cache.set('four', 4) 。
那么我希望map是:
{
['three', 3] 。
['二', '二]。
['四', 4] 。
}
我只能想到用O(n)來解決無效問題,但這違背了快取的全部目的。
uj5u.com熱心網友回復:
地圖是按照鍵的創建順序來迭代的。所以你可以用它來做
const cache = new Map();
const keysIter = cache.keys()。
function set(key, value) {
cache.set(key, value)。
if (cache.size > 3) {
cache.delete(keyIter.next().value) 。
}
然而,如果你想通過 "最古老的觸摸 "指的是更新,而不僅僅是創建(例如,在你的例子中,cache.set('five', 5)將驅逐['three', 3]而不是['two', 'two']),你將需要自己跟蹤這些觸摸,例如在一個回圈緩沖區。或者,也許只是在每次 "更新 "之前呼叫cache.delete(key),這樣,cache.set(key, value)總是在最后創建一個新條目。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/308831.html
標籤:
