LruCache使用最近最少使用的
缓存策略,最近访问的数据将变成最新的数据,如果存储区已满,通过历史访问记录来倒序淘汰数据。
LruCache本质上是一个定制化的LinkedHashMap
,get(),put(),remove()
方法里面都有synchronized
,实现线程安全。
put(K key, V value)
:把键值对存放到map中,如果map size溢出,循环删除旧数据。
get(K key)
: 通过key获取值,如果有值就直接返回,如果没值,则通过Create(key)
方法创建新值,新值不为空就把新值存入map中,存入map时会在判断key是否之前有对应值,如果有值,废弃create的新值。
remove(K key)
: 删除键对于的value
[最近访问的数据]相关排序是LinkedHashMap的功能,在LruCache构造函数中:
this.map = new LinkedHashMap<K, V>(0, 0.75f, true);
accessOrder
为 true
代表按访问顺序排序,而不是插入顺序。
参考:
https://blog.youkuaiyun.com/yaojie5519/article/details/82108125
https://www.jianshu.com/p/471e03a5d9bf