LruCache分析
工作原理
LruCache (Least Recently Used) 是安卓中一个关于内存缓存的类,特别是在操作图片的时候,大量的图片会导致oom,所以采用lru,可以保持一个最大size的内存缓存,最近使用的会放进队列的头部,如果超过这个size,最久未使用的放进队列的尾部,会首先删除,以保证内存不会无限增加.
实现
LruCache 封装了 LinkedHashMap,提供了 LRU 缓存的功能;
LruCache 通过 trimToSize 方法自动删除最近最少访问的键值对;
LruCache 不允许空键值;
LruCache 线程安全;
LruCache 的源码在不同版本中不一样,需要区分
继承 LruCache 时,必须要复写 sizeOf 方法,用于计算每个条目的大小。
特点
Key和Value都允许空
Key重复会覆盖Value允许重复
有序
非线程安全
LinkedHashMap
LinkedHashMap 继承了HashMap 实现了Map接口
HashMap+LinkedList,即它既使用HashMap操作数据结构,又使用LinkedList维护插入元素的先后顺序
单向链表
单向链表(单链表)是链表的一种,它由节点组成,每个节点都包含下一个节点的指针。
双向链表
双向链表(双链表)是链表的一种。和单链表一样,双链表也是由节点组成,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱
LinkedList
LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.
HashMap
HashMap 是一个散列表,数组+单项链表 单向链表 它存储的内容是键值对(key-value)映射。