我在Android中實現了一個存儲對象的標準LRUCache。每個鍵都是與存儲的對象關聯的唯一ObjectId。我的問題是從緩存中檢索對象的唯一方法是ObjectId(無迭代器)。實現getAll()方法的最佳方法是什麼? 另一個選擇是將所有的ObjectIds存儲在某個列表中,這樣我就可以迭代列表並獲取所有的對象 - 但是什麼是保存所有ObjectId的最佳方式?Android LRUCache檢索
謝謝!
我在Android中實現了一個存儲對象的標準LRUCache。每個鍵都是與存儲的對象關聯的唯一ObjectId。我的問題是從緩存中檢索對象的唯一方法是ObjectId(無迭代器)。實現getAll()方法的最佳方法是什麼? 另一個選擇是將所有的ObjectIds存儲在某個列表中,這樣我就可以迭代列表並獲取所有的對象 - 但是什麼是保存所有ObjectId的最佳方式?Android LRUCache檢索
謝謝!
迭代LRU緩存中的對象是沒有意義的。你無法知道哪個對象仍然在緩存中,哪些被驅逐(你實際上可以,但那是另一回事)。聽起來好像你最好用不同的數據結構,比如Hashmap等等。什麼都不會從那裏驅逐。
一個常見的用例是在內存中包含所有可能的對象鍵的列表。如果你需要一個,你檢查它是否在緩存中。如果沒有,接收它並將其添加到緩存中。
使用快照的那一刻
lruCache.snapshot().values()
得到當前集合「這是沒有意義的遍歷LRU緩存中的對象「。那麼,這對我來說是有道理的,所以如果你知道如何去做,請分享你的知識。 (我有一個緩存可能包含蘋果和桔子的混合物,蘋果和橘子通常都是以同樣的方式對待,因此爲它們分開緩存並不是一個好主意,但是偶爾我必須接受所有的蘋果都壞了,所以我想驅逐蘋果,橘子還是可以的,所以我不想做一個evictAll()。) – RenniePet
我同意 - 有一些有效的方案來迭代快照的緩存項目,無論快照中的某些項目是否可能在我們迭代它們時被驅逐。 – markproxy