`
ahuzl007
  • 浏览: 25722 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

利用LinkedHashMap生成缓存类

    博客分类:
  • java
 
阅读更多

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;
    }
}

 

分享到:
评论

相关推荐

    LinkedHashmap的使用

    2. 需要按最近使用(LRU)策略进行缓存淘汰时,LinkedHashMap可以方便地根据访问顺序实现。 总的来说,LinkedHashMap结合了HashMap的高效性和有序性的特点,适用于那些对元素顺序有特定需求但又希望保持高效性能的...

    HashMap,HashTable,LinkedHashMap,TreeMap的区别

    其中,HashMap, HashTable, LinkedHashMap, TreeMap 是四种常用的 Map 实现类,每种类都有其特点和用途。本文将对这四种 Map 实现类进行比较和分析。 HashMap HashMap 是 Java 中最常用的 Map 实现类,它根据键的 ...

    LinkedHashMap

    LinkedHashMap源代码,Java中Map的一种实现子类。

    Android图片加载的缓存类

    在Android的ImageLoaderEngine类中,我们看到作者采用了`LinkedHashMap`作为一级缓存和`ConcurrentHashMap`作为二级缓存。 一级缓存使用`LinkedHashMap`的原因在于,它是一个有序的哈希表,能够按照插入顺序或者...

    Java 中常用缓存Cache机制的实现

    在 Java 中,缓存机制的实现可以通过各种方式,例如使用 HashMap、TreeMap、LinkedHashMap 等数据结构来存储缓存对象。下面是一个简单的缓存管理器的实现: CacheManager 类的实现: CacheManager 类是一个简单...

    高速缓存实现源码

    在Java中,可以使用LinkedHashMap实现LRU策略,因为该类维护了元素的插入顺序或者访问顺序。 并发访问控制是高速缓存实现中的另一大挑战。在Java中,可以使用synchronized关键字或者java.util.concurrent包中的工具...

    java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    本文将详细分析四种常用的`Map`实现类:`HashMap`, `LinkedHashMap`, `TreeMap`以及`HashTable`之间的区别。 #### 1. HashMap `HashMap`是一种基于哈希表实现的`Map`接口,提供了一个非同步的、允许使用`null`键和...

    深入浅出解析分布式缓存关键技术与实战指南

    特别探讨分布式缓存的三大经典算法(LRU, LFU, FIFO),并给出具体实现案例——使用LinkedHashMap实现LRU缓存。接着,文章详细阐述常见的分布式缓存问题,如缓存穿透、雪崩和击穿,并提供详细的解决方案和技术手段。...

    ImageLoaderDemo图片三级缓存

    总结来说,"ImageLoaderDemo图片三级缓存"利用了Java集合框架的特性,结合并发编程理念,构建了一套高效、安全的图片加载和缓存机制。这种设计思路不仅减少了网络请求,提升了图片加载速度,还优化了内存使用,防止...

    基于LruCache listView缓存图片工具类

    5. 为了实现LRU策略,`ImageLoaders`类需要维护一个`LinkedHashMap`,当新图片加载入缓存时,将更新其最近使用状态。 6. 当内存不足或应用需要释放资源时,可以调用`ImageLoaders`的清理方法,清除缓存中的所有图片...

    浅谈Android LruCache的缓存策略

    为了有效地利用这些资源,当缓存空间不足时,需要依据一定的策略淘汰旧的缓存。LRU(Least Recently Used)算法是一种常用的缓存淘汰策略,其原则是优先移除最近最少使用的数据。 二、LruCache详解 LruCache是...

    缓存工具CacheDemo

    CacheDemo这类简单缓存框架适用于小型项目或测试环境,也可以作为大型缓存系统的基础模块。常见的应用场景包括: 1. 热门数据存储:如网站的热门文章、商品信息等。 2. API请求缓存:减少对远程API的调用频率,降低...

    仿网易新闻的缓存机制,完成图片缓存,并在断网的情况下依旧可以查看图片

    内存缓存一般使用 LinkedHashMap 或 LruCache,磁盘缓存则创建一个文件夹来保存图片文件。 2. **图片加载**: 当需要加载图片时,先检查内存缓存,然后是磁盘缓存。如果都在,直接读取;若没有,从网络下载并存入两...

    三级缓存demo

    2. 实现键值对:LruCache需要继承自`LinkedHashMap`,并重写`size()`和`entryRemoved()`方法,以便正确计算缓存项的大小和处理移除事件。 3. 添加/获取数据:使用`put(key, value)`添加数据到缓存,使用`get(key)`...

    LruCache缓存

    1. 设置合适的`maxSize`:过大可能导致内存泄漏,过小则可能无法充分利用缓存。 2. 使用软引用或弱引用:为了防止内存泄漏,可以考虑使用`SoftReference`或`WeakReference`来引用缓存中的对象。 3. 及时清理:定期...

    Android图片缓存算法的代码例子

    - 内存缓存:利用Java的HashMap或者LinkedHashMap存储Bitmap对象,提供快速访问。但需要注意内存限制,避免占用过多内存。 - 磁盘缓存:将图片数据存储到设备的外部存储,通常采用LruDiskCache或FSDiskCache实现。...

    Android LRUCache机制 缓存机制

    LRUCache类通过`LinkedHashMap`实现,该Map具有良好的迭代顺序(按插入顺序或访问顺序),从而支持LRU算法的实现。 ##### 3.2 自定义缓存大小 默认情况下,LRUCache的大小是以条目数量衡量的,但开发者可以根据需要...

Global site tag (gtag.js) - Google Analytics