`
ahuzl007
  • 浏览: 26062 次
  • 性别: 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;
    }
}

 

分享到:
评论

相关推荐

    Redis面试专题及答案(下).pdf

    ### Redis与Memcached的主要区别 #### 数据结构支持 ...以上示例中,`LRUCache`类继承自`LinkedHashMap`,通过重写`removeEldestEntry`方法实现LRU缓存策略。当缓存达到预设的容量时,最久未访问的键会被自动移除。

    JavaSE_集合.pdf

    - 在Java中,可以利用集合来实现高效的缓存管理机制,如使用`LinkedHashMap`作为缓存容器,通过设定访问顺序或者容量限制等方式实现自动淘汰旧数据。 #### 三、Collection 接口 - **Collection**是Java集合框架的...

    J2EE开发全程实录PDF J2EE开发全程实录PDF

    - **Java中的Map接口**:提供了键值对的存储和检索功能,常见的实现类有`HashMap`、`TreeMap`、`LinkedHashMap`等。 - **HashMap**: - **应用举例**:展示如何使用`HashMap`存储和检索数据。 - **Map与HashCode*...

    TinyURL:提供服务以创建一个最大数量不超过一个的URL。 每个给定URL的6个字符。 还可以查找生成的微小URL并获取原始URL

    Java提供了多种哈希算法,如`java.security.MessageDigest`类用于计算MD5或SHA哈希,或者使用`java.util.HashMap`或`java.util.LinkedHashMap`来建立URL和短链接之间的映射关系。 3. **数据库操作**:存储生成的短...

    Java JDK 6学习笔记——ppt简体版

    3. **改进的集合框架**:在JDK 6中,集合框架得到了进一步增强,包括新增的`LinkedHashMap`的`removeEldestEntry()`方法,用于实现自定义缓存策略,以及`Collections.sort()`和`Arrays.sort()`方法对自定义比较器的...

    Android面试要点

    - **概念**:Java程序编译后的字节码文件,由编译器生成,JVM解释执行。 - **组成**:主要包括常量池、方法区域、代码段等部分。 #### 二、类的加载过程与双亲委派模型 - **类加载过程**:加载、验证、准备、解析...

    java程序员面试大纲错过了金三银四你还要错过2018吗.docx

    8. **Java LinkedHashMap的应用**:`LinkedHashMap`保持了插入顺序,常用于实现LRU缓存等场景。 9. **cloneable接口实现原理**:实现了`Cloneable`接口的对象可以通过`clone()`方法进行浅复制,深复制需要自定义...

    Backend-system-key-algorithms:后端系统算法

    6. **缓存策略**:LRU(Least Recently Used)和LFU(Least Frequently Used)是最常用的缓存淘汰策略,用于优化内存使用。Java的`LinkedHashMap`就支持LRU策略。 7. **哈希算法**:MD5、SHA系列等哈希算法用于生成...

Global site tag (gtag.js) - Google Analytics