public LinkedHashMap (int initialCapacity, float loadFactor, boolean accessOrder); initialCapacity 初始容量 loadFactor 加载因子,一般是 0.75f accessOrder false 基于插入顺序 true 基于访问顺序(get一个元素后,这个元素被加到最后,使用了LRU 最近最少被使用的调度算法) boolean accessOrder = true; Map<String, ...
五.用LruCache来缓存Bitmap的初始化 LruCache<String, Bitmap>mLruCache;//获取手机最大内存 单位 kbintmaxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);//一般都将1/8设为LruCache的最大缓存intcacheSize = maxMemory / 8; mLruCache=newLruCache<String, Bitmap>(maxMemory / 8) {/...
和第一个例子相比,在LinkedHashMap实例化的过程中,重写了removeEldestEntry()方法,并根据当前linkedHashMap.size()和设置容量的判断结果返回数据,明明put了3条数据,打印却只打印了最后put的2条,这一结果证实了2点. LinkedHashMap的容量是可控的。 LinkedHashMap是有插入顺序的。 那LinkedHashMap访问有序是怎么体现的...
LRU这个算法就是把最近一次使用时间离现在时间最远的数据删除掉,而实现LruCache将会频繁的执行插入、删除等操作,我们就会想到使用LinkedList,但是我们又要基于Key-Value来保存数据,这个时候我们就会想起HashMap,但是HashMap不能像linkedList那样保留数据的插入顺序,如果要使用HashMap的话可以使用它的一个子类LinkedHashMap。
LRU 缓存利用了这样的一种思想。LRU 是 Least Recently Used 的缩写,翻译过来就是“最近最少使用”,也就是说,LRU 缓存把最近最少使用的数据移除,让给最新读取的数据。而往往最常读取的,也是读取次数最多的,所以,利用 LRU 缓存,我们能够提高系统的 performance。
一句话解释:LruCache(least recently used cache)最近最少使用缓存。 前面,我们一起学习了LinkedHashMap数据结构,那么LruCache
LinkedHashMap 本身有一个方法用于判断是否需要移除最不常读取的数,但是,原始方法默认不需要移除,所以,我们需要 override 这样一个方法,使得当缓存里存放的数据个数超过规定个数后,就把最不常用的移除掉。 代码 publicclassLRUCache{privateintcapacity;privateMap<Integer,Integer>cache;publicLRUCache(intcapacity){this...
在开始看 #afterNodeInsertion(boolean evict) 方法之前,我们先来看看如何基于 LinkedHashMap 实现 LRU 算法的缓存。代码如下:class LRUCache<K, V> extends LinkedHashMap<K, V> { private final int CACHE_SIZE; /** * 传递进来最多能缓存多少数据 * * @param cacheSize 缓存大小 */ publi...
// Create cache final int MAX_ENTRIES = 100; Map cache = new LinkedHashMap(MAX_ENTRIES+1, .75F, true) { // This method is called just after a new entry has been added public boolean removeEldes ...
手写一个自己的LocalCache - 基于LinkedHashMap实现LRU,功能目标实现一个全局范围的LocalCache,各个业务点使用自己的Namespace对LocalCache进行逻辑分区。所以在LocalCache中进行读写採用的key为(namespace+(分隔符)+数据key)。如存在下面的一对keyValue:NameToAge,Troy->