`
eyesmore
  • 浏览: 378656 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

LRUMap的一种: LinkedHashMap原来这么有魅力

阅读更多

http://stackoverflow.com/questions/224868/easy-simple-to-use-lru-cache-in-java


Easy, simple to use LRU cache in java


I know it's simple to implement, but I want to reuse something that already exist.


Problem I want to solve is that I load configuration (from XML so I want to cache them) for different pages, roles, ... so the combination of inputs can grow quite much (but in 99% will not). To handle this 1%, I want to have some max number of items in cache...


Till know I have found org.apache.commons.collections.map.LRUMap in apache commons and it looks fine but want to check also something else. Any recommendations?

 


You can use a LinkedHashMap (Java 1.4+) :
The code from exampledepot.com:
// Create cache
final int MAX_ENTRIES = 100;
Map cache = new LinkedHashMap(MAX_ENTRIES+1, .75F, true) { //true 以访问顺序排列;false 以插入顺序排列
    // This method is called just after a new entry has been added
    public boolean removeEldestEntry(Map.Entry eldest) {
        return size() > MAX_ENTRIES;//删除最老的键值对的条件
    }
};
// Add to cache
Object key = "key";
cache.put(key, object);
// Get object
Object o = cache.get(key);
if (o == null && !cache.containsKey(key)) {
    // Object not in cache. If null is not a possible value in the cache,
    // the call to cache.contains(key) is not needed
}
// If the cache is to be used by multiple threads,
// the cache must be wrapped with code to synchronize the methods
cache = (Map)Collections.synchronizedMap(cache);

分享到:
评论

相关推荐

    java软件技术文档-深入java8的集合4:LinkedHashMap的实现原理.pdf

    K,V> p) { } 这些方法是 ...通过回调方法和 `accessOrder` 属性,LinkedHashMap 实现了动态维护顺序的功能,使得在遍历 Map 时可以保持一定的顺序,这对于需要有序输出或者基于访问频率进行缓存淘汰的场景非常有用。

    ritelinked:LinkedHashMap和LinkedHashSet

    RiteLinked-类似HashMap的容器,以用户可控制的顺序保存其键值对 提供了LinkedHashMap和... let mut lru_cache = LinkedHashMap :: new (); let key = "key" . to_owned (); let _cached_val = lru_cache .

    Java实现LRU缓存机制:深入解析与高效编码实践

    LRU缓存机制是一种非常实用的缓存淘汰策略,它在很多应用场景中都有广泛的应用。在Java中实现LRU缓存,可以通过使用LinkedHashMap来简化实现,也可以手动实现以获得更好的控制。在多线程环境中,还需要考虑缓存的...

    LinkedHashMap

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

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

    `HashMap`是一种基于哈希表实现的`Map`接口,提供了一个非同步的、允许使用`null`键和值的存储结构。`HashMap`通过计算对象的哈希码来存储和检索对象,这使得数据可以在常数时间内被访问。 - **特点**: - **非...

    Java集合系列(LinkedHashMap+LinkedList+ArrayList)

    Java 集合系列中的 LinkedHashMap、LinkedList 和 ArrayList 都是非常重要的数据结构,每种数据结构都有其特点和应用场景。了解这些数据结构的特点和应用场景,可以帮助我们更好地选择合适的数据结构来解决实际问题...

    LinkedHashmap的使用

    总的来说,LinkedHashMap结合了HashMap的高效性和有序性的特点,适用于那些对元素顺序有特定需求但又希望保持高效性能的场景。在理解和使用时,需要注意其内部结构和排序方式,以便更好地利用其特性。

    HashMap,HashTable,LinkedHashMap,TreeMap的区别

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

    LinkedHashMapHelper:将LinkedHashMap转换为json,反之亦然

    将LinkedHashMap转换为json,反之亦然 如何使用 LinkedHashMap requestData = new LinkedHashMap(); LinkedHashMap auth =新的LinkedHashMap(); auth.put(“ ServiceName”,“ Login”); auth.put(“ ...

    JavaLinkedHashMap源码解析Java开发Ja

    LinkedHashMap 的特点在于,它不仅仅是一个哈希表,还通过双向链表保持了元素的插入顺序或访问顺序,使得在遍历Map时可以按照插入或访问的顺序进行。 1. **数据结构**: - **哈希表**:内部通过数组实现,提供了...

    LRU算法四种实现方式介绍.docx

    LRU 算法有四种实现方式: 1. 使用一个数组来存储数据,给每一个数据项标记一个访问时间戳。每次插入新数据项的时候,先把数组中存在的数据项的时间戳自增,并将新数据项的时间戳置为 0 并插入到数组中。每次访问...

    一文搞懂Java的LinkedHashMap.docx

    Map, String> linkedHashMap = new LinkedHashMap(); linkedHashMap.put("沉", "沉默王二"); linkedHashMap.put("默", "沉默王二"); linkedHashMap.put("王", "沉默王二"); linkedHashMap.put("二", "沉默王二"); ...

    Java LinkedHashMap工作原理及实现

    首先还是类似的,我们写一个简单的LinkedHashMap的程序:  LinkedHashMap<String> lmap = new LinkedHashMap();  lmap.put(语文, 1);  lmap.put(数学, 2);  lmap.put(英语, 3);  lmap.put(历史, 4); ...

    LRU算法实现1

    在Java中,LRU缓存的实现通常有两种方式:使用`LinkedHashMap`或自定义数据结构(链表+HashMap)。 ### LRU Cache的`LinkedHashMap`实现 `LinkedHashMap`是Java集合框架中的一个类,继承自`HashMap`,并添加了双向...

    LRU.rar_LRU java

    LRU(Least Recently Used)是最常用的页面替换算法之一,它基于“最近最少使用”的原则,即当内存空间不足时,最长时间未被使用的数据会被优先淘汰。在Java中实现LRU算法,通常会用到数据结构如哈希表和双向链表。...

Global site tag (gtag.js) - Google Analytics