`
uule
  • 浏览: 6351769 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

使用LinkedHashMap构建LRU的Cache

 
阅读更多

使用LinkedHashMap构建LRU的Cache

 

package tags;

import java.util.LinkedHashMap;

public class LRUCache<K,V> extends LinkedHashMap<K,V> {

    /** 最大数据存储容量 */  
    private static final int  LRU_MAX_CAPACITY     = 1024;  

    /** 存储数据容量  */  
    private int               capacity;  

    public LRUCache() {  
        super();  
    }  

    public LRUCache(int initialCapacity, float loadFactor,Boolean useCache) {  
        super(initialCapacity, loadFactor, useCache);  
        capacity = LRU_MAX_CAPACITY;  
    }  

 
    public LRUCache(int initialCapacity, float loadFactor,Boolean useCache, int lruCapacity) {  
        super(initialCapacity, loadFactor, true);  
        this.capacity = lruCapacity;  
    }  

    @Override 
    protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
        System.out.println(eldest.getKey() + "=" + eldest.getValue());  
        return size () > LRUCache.this.capacity;
    }  
    
    
    public static void main(String[] args) {  
    	  
    	LRUCache<String, String> map = new LRUCache<String, String>(16, 0.75f,true);  
        map.put("a", "a"); //a  a  
        map.put("b", "b"); //a  a b  
        map.put("c", "c"); //a  a b c  
        map.put("a", "a2"); //   b c a       
        map.put("d", "d"); //b  b c a d  
        map.put("a", "a3"); //   b c d a  
        map.put("b", "b2"); //   c d a b       
        map.put("f", "f"); //c  c d a b f  
        map.put("g", "g"); //c  c d a b f g  
      
        map.get("d"); //c a b f g d  
        for (Entry<String, String> entry : map.entrySet()) {  
            System.out.print(entry.getValue() + ", ");  
        }  
        System.out.println();  
      
        /*map.get("a"); //c b f g d a  
        for (Entry<String, String> entry : map.entrySet()) {  
            System.out.print(entry.getValue() + ", ");  
        }  
        System.out.println();  
      
        map.get("c"); //b f g d a c  
        for (Entry<String, String> entry : map.entrySet()) {  
            System.out.print(entry.getValue() + ", ");  
        }  
        System.out.println();  
      
        map.get("b"); //f g d a c b  
        for (Entry<String, String> entry : map.entrySet()) {  
            System.out.print(entry.getValue() + ", ");  
        }  
        System.out.println();  
      
        map.put("h", "h"); //f  f g d a c b h  
        for (Entry<String, String> entry : map.entrySet()) {  
            System.out.print(entry.getValue() + ", ");  
        }  
        System.out.println();  */
    }
}

 

结果:

 

a=a

a=a

a=a

b=b

c=c

c=c

c, a3, b2, f, g, d, 

c, b2, f, g, d, a3, 

b2, f, g, d, a3, c, 

f, g, d, a3, c, b2, 

f=f

f, g, d, a3, c, b2, h,

 

LinkedHashMap : http://uule.iteye.com/admin/blogs/1522291

分享到:
评论

相关推荐

    Java实现LRU算法.zip

    在Java中实现LRU算法,通常会使用数据结构如HashMap或LinkedHashMap来存储页面及其访问信息。HashMap提供快速的查找操作,而LinkedHashMap则同时保持了插入顺序,这对于实现LRU至关重要,因为我们需要快速找到最近...

    lru.rar_LRU

    在实际编程中,可以使用各种编程语言的库来实现LRU,例如Python的`functools.lru_cache`,Java的`LinkedHashMap`,或者是C++的自定义实现。 总之,LRU算法是一种高效的内存管理策略,通过优先淘汰最近最少使用的...

    LRU算法--utils工具包

    这篇博客文章可能讨论了如何使用这些工具来构建一个LRU缓存系统。 首先,我们来看`LRUCache.java`。这个文件很可能是实现了一个自定义的LRU缓存结构。`LRUCache`通常会包含一个内部类来维护一个双向链表,用于记录...

    基于Java实现缓存Cache的深入分析

    本文将深入探讨如何使用Java实现一个基于LinkedHashMap的LRU(Least Recently Used,最近最少使用)缓存策略。 LRU缓存策略的基本思想是:当缓存满时,优先淘汰最近最少使用的数据。在Java中,LinkedHashMap类提供...

    java-lru-demo:这是LRU算法的实现

    LRU(Least Recently Used)算法是一种常用的页面替换策略,它基于“最近最少使用”的原则...通过学习这个项目,你可以掌握如何在Java中利用`LinkedHashMap`来构建高效的缓存系统,以及如何根据业务需求调整缓存策略。

    javalruleetcode-LeetCode-Solutions:LeetCode-解决方案

    在 Java 中实现 LRUCache,我们可以利用 LinkedHashMap 这个数据结构,它具有访问顺序和插入顺序的特性,非常适合构建 LRU 缓存。 首先,我们需要了解 LinkedHashMap 的三个关键属性: 1. accessOrder:布尔值,...

    LRUCache实现 同步LRUCache

    LRUCache(Least Recently Used Cache)是一种常用的缓存淘汰策略,它基于“最近最少使用”的原则,当缓存满时,会优先淘汰最近最不常使用的数据。在Java中,虽然标准库没有直接提供LRUCache,但我们可以通过自定义...

    java高速文件缓存

    1. LRU(Least Recently Used):最近最少使用策略,当缓存满时,淘汰最近最少使用的数据。 2. LFU(Least Frequently Used):最不经常使用策略,淘汰使用频率最低的数据。 3. FIFO(First In First Out):先进先...

    基于Java的实例源码-Java缓存工具 SimpleCache.zip

    2. **实现类**:`SimpleCache`可能是实现`Cache`接口的具体类,它可能使用了Java集合框架中的数据结构,如HashMap或LinkedHashMap来存储缓存项,并且可能实现了缓存过期策略,比如基于时间的过期或者基于LRU(Least ...

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

    以下是一个使用Java实现的LRU缓存示例,基于`LinkedHashMap`: ```java import java.util.LinkedHashMap; import java.util.Map; public class LRUCache, V&gt; extends LinkedHashMap, V&gt; { private final int ...

    LRUCache:用Java实现的小型LRUCache。 不顾编码测试而制造

    LRUCache(Least Recently Used Cache)是一种常用的缓存淘汰策略,它基于“最近最少使用”的原则,当缓存满时,会优先淘汰最近最不常使用的数据。在Java中实现LRUCache,我们可以利用Java 8引入的`java.util....

    eviction-hashmap

    - 可以使用链表和哈希表组合的方式实现,比如Java的LinkedHashMap,它可以维护元素的插入顺序或访问顺序,方便实现LRU策略。 - 使用第三方库,如Google的Guava库中的Cache,它提供了丰富的缓存配置和自动剔除策略...

    PhotoWall:照片墙

    这个项目的核心是实现一个高效的照片加载策略,通过采用LrcCache(Least Recently Used Cache,最近最少使用缓存)来优化图片的加载速度和内存使用,为用户提供快速、无卡顿的浏览体验。 在瀑布流布局中,照片会...

Global site tag (gtag.js) - Google Analytics