1. LRU缓存
LRU是Least Recently Used 近期最少使用算法
import java.util.LinkedHashMap; import java.util.Map; public class LRUCache<K, V> extends LinkedHashMap<K, V> { private static final long serialVersionUID = -1882071901467368406L; static final int DEFAULT_INITIAL_CAPACITY = 16; static final float DEFAULT_LOAD_FACTOR = 0.75f; static final int DEFAULT_CACHE_SIZE = 1024; private final int cacheSize; public LRUCache() { this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR, DEFAULT_CACHE_SIZE); } public LRUCache(int capacity, float loadFactor, int cacheSize) { super(capacity, loadFactor, true); this.cacheSize = cacheSize; } protected boolean removeEldestEntry(Map.Entry<K,V> eldest) { return size() > cacheSize; } }
1. FIFO缓存
import java.util.LinkedHashMap; public class CommonCache<K, V> extends LinkedHashMap<K, V> { /** UID。 */ private static final long serialVersionUID = 1L; /** 默认缓存SIZE。 */ private static final int DEFAULT_CACHE_SIZE = 1024; /** 缓存SIZE。 */ private int cacheSize = DEFAULT_CACHE_SIZE; /** * 构造方法。 */ public CommonCache() { } /** * @return cacheSize */ public int getCacheSize() { return cacheSize; } /** * @param cacheSize */ public void setCacheSize(int cacheSize) { this.cacheSize = cacheSize; } @Override protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) { return size() > cacheSize; } }
相关推荐
2. 需要按最近使用(LRU)策略进行缓存淘汰时,LinkedHashMap可以方便地根据访问顺序实现。 总的来说,LinkedHashMap结合了HashMap的高效性和有序性的特点,适用于那些对元素顺序有特定需求但又希望保持高效性能的...
其中,HashMap, HashTable, LinkedHashMap, TreeMap 是四种常用的 Map 实现类,每种类都有其特点和用途。本文将对这四种 Map 实现类进行比较和分析。 HashMap HashMap 是 Java 中最常用的 Map 实现类,它根据键的 ...
LinkedHashMap源代码,Java中Map的一种实现子类。
在Android的ImageLoaderEngine类中,我们看到作者采用了`LinkedHashMap`作为一级缓存和`ConcurrentHashMap`作为二级缓存。 一级缓存使用`LinkedHashMap`的原因在于,它是一个有序的哈希表,能够按照插入顺序或者...
在 Java 中,缓存机制的实现可以通过各种方式,例如使用 HashMap、TreeMap、LinkedHashMap 等数据结构来存储缓存对象。下面是一个简单的缓存管理器的实现: CacheManager 类的实现: CacheManager 类是一个简单...
在Java中,可以使用LinkedHashMap实现LRU策略,因为该类维护了元素的插入顺序或者访问顺序。 并发访问控制是高速缓存实现中的另一大挑战。在Java中,可以使用synchronized关键字或者java.util.concurrent包中的工具...
本文将详细分析四种常用的`Map`实现类:`HashMap`, `LinkedHashMap`, `TreeMap`以及`HashTable`之间的区别。 #### 1. HashMap `HashMap`是一种基于哈希表实现的`Map`接口,提供了一个非同步的、允许使用`null`键和...
特别探讨分布式缓存的三大经典算法(LRU, LFU, FIFO),并给出具体实现案例——使用LinkedHashMap实现LRU缓存。接着,文章详细阐述常见的分布式缓存问题,如缓存穿透、雪崩和击穿,并提供详细的解决方案和技术手段。...
总结来说,"ImageLoaderDemo图片三级缓存"利用了Java集合框架的特性,结合并发编程理念,构建了一套高效、安全的图片加载和缓存机制。这种设计思路不仅减少了网络请求,提升了图片加载速度,还优化了内存使用,防止...
5. 为了实现LRU策略,`ImageLoaders`类需要维护一个`LinkedHashMap`,当新图片加载入缓存时,将更新其最近使用状态。 6. 当内存不足或应用需要释放资源时,可以调用`ImageLoaders`的清理方法,清除缓存中的所有图片...
为了有效地利用这些资源,当缓存空间不足时,需要依据一定的策略淘汰旧的缓存。LRU(Least Recently Used)算法是一种常用的缓存淘汰策略,其原则是优先移除最近最少使用的数据。 二、LruCache详解 LruCache是...
CacheDemo这类简单缓存框架适用于小型项目或测试环境,也可以作为大型缓存系统的基础模块。常见的应用场景包括: 1. 热门数据存储:如网站的热门文章、商品信息等。 2. API请求缓存:减少对远程API的调用频率,降低...
内存缓存一般使用 LinkedHashMap 或 LruCache,磁盘缓存则创建一个文件夹来保存图片文件。 2. **图片加载**: 当需要加载图片时,先检查内存缓存,然后是磁盘缓存。如果都在,直接读取;若没有,从网络下载并存入两...
2. 实现键值对:LruCache需要继承自`LinkedHashMap`,并重写`size()`和`entryRemoved()`方法,以便正确计算缓存项的大小和处理移除事件。 3. 添加/获取数据:使用`put(key, value)`添加数据到缓存,使用`get(key)`...
1. 设置合适的`maxSize`:过大可能导致内存泄漏,过小则可能无法充分利用缓存。 2. 使用软引用或弱引用:为了防止内存泄漏,可以考虑使用`SoftReference`或`WeakReference`来引用缓存中的对象。 3. 及时清理:定期...
- 内存缓存:利用Java的HashMap或者LinkedHashMap存储Bitmap对象,提供快速访问。但需要注意内存限制,避免占用过多内存。 - 磁盘缓存:将图片数据存储到设备的外部存储,通常采用LruDiskCache或FSDiskCache实现。...
LRUCache类通过`LinkedHashMap`实现,该Map具有良好的迭代顺序(按插入顺序或访问顺序),从而支持LRU算法的实现。 ##### 3.2 自定义缓存大小 默认情况下,LRUCache的大小是以条目数量衡量的,但开发者可以根据需要...