外观
如何理解LRU 缓存的 Java 实现?
标准回答
可以用哈希表加双向链表实现,哈希定位和链表移动平均O(1)。Java的LinkedHashMap访问顺序模式可用于简洁实现;超限淘汰最久未访问项。
下面是按条目数限制的练习,不是图片缓存成品。accessOrder=true时get也会修改顺序,所以get和put都必须遵循同一同步策略。示例只开放两个同步方法,避免把内部Map暴露给调用者。
用于Bitmap还应按字节计量、处理资源生命周期并避免锁内执行重的创建或释放逻辑;缓存键也必须包含会影响结果的条件。
追问与回答
LRU能解决所有缓存问题吗
不能。扫描型访问可能污染热点,过期和一致性需额外设计;淘汰策略不是完整缓存协议。
内容来源
- Android 与 AI 工程 Wiki · 原条目
q079