LRU缓存策略
LRU算法
LRU是一种简单的缓存算法。在一定容量的情况下,淘汰最近最少使用的缓存。即近期内最不会被访问的数据进行淘汰。
LruCache
LruCache是Android提供的一种内存缓存策略,它在有限的内存下,尽可能存储会被使用的数据。
LruCache的实现不算太难,所以,在这里,咱们就不用在这里看源码了,毕竟,使用Studio观看源码是一件挺赏心悦目的事。这里,小生我就提一些问题,然后咱们一起解答,各位看官觉得好吗?好的!
源码中,LruCache使用的是LinkedHashMap,对数据进行管理。为什么使用LinkedHashMap那?
Map是一种关联数组,遵循FIFO原则;HashMap按照进行过hash运算的hashCode进行查询,迭代遍历效率是比较高的。但是,它的插入是没有顺序的。而LRU对数据进行插入和删除是按照在Map中的索引,所以HashMap不适用。LinkedHashMap按照被插入顺序保存数据,而且链表在迭代访问时的效率是比较高效的(插入和删除),因此LinkedHashMap才是梦想中的女神!
LRU的缓存淘汰过程是怎么样的那?
注意:A:代表的是经过hash运算得到hashcode,它存储到HashMap的每个槽中,每个槽的插入顺序由链表维护。
这么生动形象的图片,小生是万万画不出的,此图摘之网络。对图进行分析,咱们可以得出以下结论
1.每次存数据(即进过hash的hashcode),都会进入链表进行查询,并将数据置于顶部。
2.key或者value不允许为null,如果get() -> null ,则key不存在;
3.当缓存的size1超过链表本身的size0,则会将底部数据移除
以上便是咱们对LruCache的简单了解了。当然,咱们只是对他得实现过程进行了简单的分析,为了当一个有理想,有追求的程序员,咱们应该去看它的源码,理解其中的精髓,相信在不久的将来,咱们都会升职加薪,迎娶白富美,当上CEO,走向人生巅峰的。。。
最后,小生奉上一碗心灵鸡汤,与君共勉:压力,不是有人比你优秀,而是比你优秀的人依然在努力。