常用数据结构的分析

170 阅读1分钟

LruCache

是什么

**近期 _最少 **_使用算法,核心思想是优先淘汰掉那些近期使用最少的缓存对象。

LruCache的原理

LruCache内部有一个缓存列表,当一个缓存数据被访问的时候,这个数据就会被提到列表头部,这样的话,列表尾部的数据就是不经常使用的数据,如果内存不够的话,此时尾部的数据就会被回收。

为什么要使用它

我们需要在页面上加载网络图片,如果每次加载图片都从网络加载,有2个弊端

(1)消耗流量

(2)效率比较低

那么我们可以采用下面的方法,每次需要加载图片的时候,首先从缓存中取,如果取到就用缓存中的图片,如果没有取到,就从网络加载,加载完成以后,然后将图片缓存到本地。

而缓存图片的容器最好用的就是LruCache。

扩展

LruCache VS Map

LruCache 底层是LinkedHashMap,LruCache和Map相比,它里面存储的键值对是有序的,这样做就是为了当其中的数据被访问的时候,这个数据会被放到LruCache的头部。

为什么要用LinkedHashMap?

LinkedHashMap刚好提供LruCache需要的算法,当第三个参数为true的时候,数据在被访问的时候,会将最近访问的数据放在最后面,然后当内存不足的时候,回收对象,从前面开始删除就好。

public LinkedHashMap(int initialCapacity,
                     float loadFactor,                     
                     boolean accessOrder)

如何使用