SimpleLRUCache.java |
/* Copyright (C) 2009 CSE,IIT Bombay http://www.cse.iitb.ac.in This file is part of the ConStore open source storage facility for concept-nets. ConStore is free software and distributed under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License; you can copy, distribute and transmit the work with the work attribution in the manner specified by the author or licensor. You may not use this work for commercial purposes and may not alter, transform, or build upon this work. Please refer the legal code of the license, available at http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode ConStore is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ package iitb.con.caching; import java.util.LinkedHashMap; import java.util.Map; /** * A simple LRU cache. It does not implement the cache interface, which specifically * uses {@link CacheObject} for cache object. This class allows to use any type as * cache object. * * @author Prathab K * */ public class SimpleLRUCache<K, V> { /** Number of entries in the cache */ public int MAX_ENTRIES = 1000; /** Hash map structure for cache */ private Map<K, V> cache; public SimpleLRUCache() { create(); } public SimpleLRUCache(int maxEntries) { this.MAX_ENTRIES = maxEntries; create(); } /** * Creates the cache as Linked Hash Map structure and * remove method is overridden when the size exceeds the * maximum entries, the eldest entry is removed and the new * entry is added. */ private void create() { cache = new LinkedHashMap<K,V>(MAX_ENTRIES+1, .75F, true) { // This method is called just after a new entry has been added public boolean removeEldestEntry(Map.Entry<K, V> eldest) { return size() > MAX_ENTRIES; } }; } /** * Places the cache object in the cache using the key * @param key key used to place the object * @param object cache object * @return <tt>true</tt> on success */ public V put(K key, V object) { return cache.put(key, object); } /** * Returns the cached object for the given key * @param key key used to retrieve the object * @return cached object if present, else returns <tt>NULL</tt> */ public V get(K key) { return cache.get(key); } }