美文网首页
LruCache学习

LruCache学习

作者: 思倦ai | 来源:发表于2019-05-08 22:40 被阅读0次

今天看了下LruCache类的实现 记录下学习笔记
LruCache (Least Recently Used) 近期最少使用的算法

int cacheSize = 4 * 1024 * 1024; // 4MiB
LruCache<String, Bitmap> bitmapCache = new LruCache<String, Bitmap>(cacheSize) {
    protected int sizeOf(String key, Bitmap value) {
        return value.getByteCount();
    }

这是LruCache类上面注释的用法示例


其实第一次看到这个类的疑惑是 怎么就实现了近期最少使用的功能?在哪里实现的? 原理是什么?
带着这个疑惑 去看了看实现发现只是个LinkedHashMap (小白数据结构很差)
原来这个算法的核心是LinkedHashMap这个数据结构实现的 LruCache在这个基础上包装了一层

new LinkedHashMap<K, V>(0, 0.75f, true);

第三个构造参数 accessOrder 决定了访问LinkedHashMap时候的排序方式
true for access-order 使用访问顺序排序 (就是LruCache算法)
false for insertion-order 使用插入顺序排序


在LruCache里面使用 trimToSize 方法控制容器的大小
但是实际去看源码的时候发现这个方法在寻找toEvict对象的时候有问题 根据注释说这个方法的寻找各个版本会有差异
查看http://androidxref.com/网站发现
寻找toEvict使用的是linkedHashMap的下面这个方法 注释写的也很明显

   // Android-added: eldest(), for internal use in LRU caches
    /**
     * Returns the eldest entry in the map, or {@code null} if the map is empty.
     * @hide
     */
    public Map.Entry<K, V> eldest() {
        return head;
    }

到这里算是对LruCache有了更深的认识 😄

相关文章

  • Rocksdb(LevelDB) LRU 实现

    [TOC] 参考 leveldb中的LRUCache设计 LevelDB-LruCache源码学习 1. 前言 l...

  • LruCache学习

    今天看了下LruCache类的实现 记录下学习笔记LruCache (Least Recently Used) 近...

  • LinkedHashMap

    在上一次LruCache的学习中,了解到LruCache的实现主要依赖于LinkedHashMap,所以这次重点学...

  • LruCache源码学习

    LruCache是Android 内置的一种缓存类,可以直接使用,方便的帮助我们实现缓存,他是基于LRU算法的,如...

  • LruCache

    LruCache的使用 LruCache部分源码解析 LruCache 利用 LinkedHashMap 的一个特...

  • Android-Glide源码解析

    一、LruCache 要分析Glide的源码,首先就需要分析LruCache。LruCache是基于LinkedH...

  • Java基础_LruCache工作原理

    本文主要从如下节点讲解 LRU算法简介 LruCache的简介 LruCache的代码实操 LruCache的原理...

  • 一日一学_LruCache(源码解读)

    在学习LruCache源码之前,我们有必要简单了解LinkedHashMap(使用): LinkedHashMap...

  • Glide解析(一) - LruCache

    本文介绍的内容有 LruCache算法思想介绍 v4包中LruCache中源码解析 LruCache算法思想介绍 ...

  • (1)LruCache原理分析

    浅析LruCache原理 Android用LruCache(Least recently use Cache 意...

网友评论

      本文标题:LruCache学习

      本文链接:https://www.haomeiwen.com/subject/hotboqtx.html