• Android提供的LruCache类简介


    分类: Android开发
      1. package android.util;  
      2. import import /** 
      3.  * A cache that holds strong references to a limited number of values. Each time 
      4.  * a value is accessed, it is moved to the head of a queue. When a value is 
      5.  * added to a full cache, the value at the end of that queue is evicted and may 
      6.  * become eligible for garbage collection. 
      7.  * Cache保存一个强引用来限制内容数量,每当Item被访问的时候,此Item就会移动到队列的头部。
      8.  * <p>If your cached values hold resources that need to be explicitly released, 
      9.  * override {@link #entryRemoved}. 
      10.  * 如果你cache的某个值需要明确释放,重写entryRemoved()
      11.  * <p>If a cache miss should be computed on demand for the corresponding keys, 
      12.  * override {@link #create}. This simplifies the calling code, allowing it to 
      13.  * assume a value will always be returned, even when there's a cache miss. 
      14.  * 如果key相对应的item丢掉啦,重写create().这简化了调用代码,即使丢失了也总会返回。
      15.  * <p>By default, the cache size is measured in the number of entries. Override 
      16.  * {@link #sizeOf} to size the cache in different units. For example, this cache 
      17.  * is limited to 4MiB of bitmaps: 默认cache大小是测量的item的数量,重写sizeof计算不同item的
      18.  * <pre>   {@code 
      19.  *   int cacheSize = 4 * 1024 * 1024; // 4MiB 
      20.  *   LruCache<String, Bitmap> bitmapCache = new LruCache<String, Bitmap>(cacheSize) { 
      21.  *       protected int sizeOf(String key, Bitmap value) { 
      22.  *           return value.getByteCount(); 
      23.  *       } 
      24.  *   }}</pre> 
      25.  * 
      26.  * <p>This class is thread-safe. Perform multiple cache operations atomically by 
      27.  * synchronizing on the cache: <pre>   {@code 
      28.  *   synchronized (cache) { 
      29.  *     if (cache.get(key) == null) { 
      30.  *         cache.put(key, value); 
      31.  *     } 
      32.  *   }}</pre> 
      33.  * 
      34.  * <p>This class does not allow null to be used as a key or value. A return 
      35.  * value of null from {@link #get}, {@link #put} or {@link #remove} is 
      36.  * unambiguous: the key was not in the cache.
      37.  */ publicclass privatefinal   
      38. privateint size; //已经存储的大小
      39. privateint maxSize; //规定的最大存储空间
      40. privateint putCount;  //put的次数
      41. privateint createCount;  //create的次数
      42. privateint evictionCount;  //回收的次数
      43. privateint hitCount;  //命中的次数
      44. privateint missCount;  //丢失的次数
      45.      * @param maxSize for caches that do not override {@link #sizeOf}, this is 
      46.      *     the maximum number of entries in the cache. For all other caches, 
      47.      *     this is the maximum sum of the sizes of the entries in this cache. 
      48.      */ publicint if) {  
      49. thrownew this thisnew.75f, true      * Returns the value for {@code key} if it exists in the cache or can be 
      50.      * created by {@code #create}. If a value was returned, it is moved to the 
      51.      * head of the queue. This returns null if a value is not cached and cannot 
      52.      * be created. 通过key返回相应的item,或者创建返回相应的item。相应的item会移动到队列的头部,
      53.      */ publicfinal ifnull thrownew synchronizedthis ifnull return          * Attempt to create a value. This may take a long time, and the map 
      54.          * may be different when create() returns. If a conflicting value was 
      55.          * added to the map while create() was working, we leave that value in 
      56.          * the map and release the created value. 
      57.          * 如果丢失了就试图创建一个item
      58.          */ ifnull returnnull synchronizedthis ifnull   
      59.                 //如果前面存在oldValue,那么撤销put() 
      60. else ifnull false return else return      * Caches {@code value} for {@code key}. The value is moved to the head of 
      61.      * the queue. 
      62.      * 
      63.      * @return the previous value mapped by {@code key}. 
      64.      */ publicfinal ifnullnull thrownew synchronizedthis ifnull) {  //返回的先前的value值
      65. ifnull false return      * @param maxSize the maximum size of the cache before returning. May be -1 
      66.      *     to evict even 0-sized elements. 
      67.      */ privatevoidint whiletrue synchronizedthis if || (map.isEmpty() && size != )) {  
      68. thrownew if break ifnull break truenull      * Removes the entry for {@code key} if it exists. 
      69.      * 删除key相应的cache项,返回相应的value
      70.      * @return the previous value mapped by {@code key}. 
      71.      */ publicfinal ifnull thrownew synchronizedthis ifnull ifnull falsenull return      * Called for entries that have been evicted or removed. This method is 
      72.      * invoked when a value is evicted to make space, removed by a call to 
      73.      * {@link #remove}, or replaced by a call to {@link #put}. The default 
      74.      * implementation does nothing. 
      75.      * 当item被回收或者删掉时调用。改方法当value被回收释放存储空间时被remove调用,
      76.      * <p>The method is called without synchronization: other threads may 
      77.      * access the cache while this method is executing. 
      78.      * 
      79.      * @param evicted true if the entry is being removed to make space, false 
      80.      *     if the removal was caused by a {@link #put} or {@link #remove}. 
      81.      * @param newValue the new value for {@code key}, if it exists. If non-null, 
      82.      *     this removal was caused by a {@link #put}. Otherwise it was caused by 
      83.      *     an eviction or a {@link #remove}. 
      84.      */ protectedvoidboolean      * Called after a cache miss to compute a value for the corresponding key. 
      85.      * Returns the computed value or null if no value can be computed. The 
      86.      * default implementation returns null. 
      87.      * 当某Item丢失时会调用到,返回计算的相应的value或者null
      88.      * <p>The method is called without synchronization: other threads may 
      89.      * access the cache while this method is executing. 
      90.      * 
      91.      * <p>If a value for {@code key} exists in the cache when this method 
      92.      * returns, the created value will be released with {@link #entryRemoved} 
      93.      * and discarded. This can occur when multiple threads request the same key 
      94.      * at the same time (causing multiple values to be created), or when one 
      95.      * thread calls {@link #put} while another is creating a value for the same 
      96.      * key. 
      97.      */ protected returnnull privateint int if) {  
      98. thrownew + value);  
      99. return      * Returns the size of the entry for {@code key} and {@code value} in 
      100.      * user-defined units.  The default implementation returns 1 so that size 
      101.      * is the number of entries and max size is the maximum number of entries. 
      102.      * 返回用户定义的item的大小,默认返回1代表item的数量,最大size就是最大item值
      103.      * <p>An entry's size must not change while it is in the cache. 
      104.      */ protectedint return;  
      105.      * Clear the cache, calling {@link #entryRemoved} on each removed entry. 
      106.      */ publicfinalvoid );   
      107.      * For caches that do not override {@link #sizeOf}, this returns the number 
      108.      * of entries in the cache. For all other caches, this returns the sum of 
      109.      * the sizes of the entries in this cache. 
      110.      */ publicsynchronizedfinalint return      * For caches that do not override {@link #sizeOf}, this returns the maximum 
      111.      * number of entries in the cache. For all other caches, this returns the 
      112.      * maximum sum of the sizes of the entries in this cache. 
      113.      */ publicsynchronizedfinalint return      * Returns the number of times {@link #get} returned a value that was 
      114.      * already present in the cache. 
      115.      */ publicsynchronizedfinalint return      * Returns the number of times {@link #get} returned null or required a new 
      116.      * value to be created. 
      117.      */ publicsynchronizedfinalint return      * Returns the number of times {@link #create(Object)} returned a value. 
      118.      */ publicsynchronizedfinalint return      * Returns the number of times {@link #put} was called. 
      119.      */ publicsynchronizedfinalint return      * Returns the number of values that have been evicted. 
      120.      */ publicsynchronizedfinalint return      * Returns a copy of the current contents of the cache, ordered from least 
      121.      * recently accessed to most recently accessed. 返回当前cache的副本,从最近最少访问到最多访问
      122.      */ publicsynchronizedfinal returnnew  publicsynchronizedfinal int int ? ( * hitCount / accesses) : ;  
      123. return,  

  • 相关阅读:
    BZOJ 2154 Crash的数字表格 【莫比乌斯反演】
    BZOJ 3529 [Sdoi2014]数表 【莫比乌斯反演】
    BZOJ 2820 YY的GCD 【莫比乌斯反演】
    BZOJ 2440 [中山市选2011]完全平方数 【莫比乌斯反演】
    [BalticOI 2004] Sequence
    AtCoder [ARC070E] NarrowRectangles
    AtCoder [AGC022E] Median Replace
    AtCoder [ARC101E] Ribbons on Tree
    CF107D Crime Management
    Loj 6497「雅礼集训 2018 Day1」图
  • 原文地址:https://www.cnblogs.com/xgjblog/p/4064806.html
Copyright © 2020-2023  润新知