java 基于linkedhashmap实现LRUCache

来源:互联网 发布:外网监控软件 编辑:程序博客网 时间:2024/06/16 18:11

所谓LRU就是最近最少被使用的意思,LRUCache的目的就是当缓存中的数据量达到一定的程度时,添加新的数据会将最近最少被使用的旧数据删除,以保障Cache中的数据都是经常需要的数据,提高命中率。下面是一个基于linkedhashmap的LRUCache的简单实现,关键是重写LinkedHashMap的removeEldestEntry方法,在LinkedHashMap中该方法默认返回false(LRUCache本身未考虑线程安全的问题)

public class BasicLRUCache<K, V> {private LinkedHashMap<K, V> map;private int cacheSize;static final int DEFAULT_CACHE_SIZE = 2;public BasicLRUCache() {this(DEFAULT_CACHE_SIZE);}public BasicLRUCache(int cacheSize) {this.cacheSize = cacheSize;int hashTableSize = (int) Math.ceil(cacheSize/0.75f) + 1;map = new LinkedHashMap<K,V>(hashTableSize, 0.75f, true) {private static final long serialVersionUID = 1L;@Overrideprotected boolean removeEldestEntry(java.util.Map.Entry<K,V> eldest) {System.out.println("size=" + size() + " cacheSize=" + BasicLRUCache.this.cacheSize);return size() > BasicLRUCache.this.cacheSize;};};}public V put(K key, V value) {return map.put(key, value);}public V get(Object key) {return map.get(key);}public static void main(String[] args) {BasicLRUCache<String, String> lruCache = new BasicLRUCache<String, String>(3);lruCache.put("1", "1");lruCache.put("2", "2");lruCache.put("3", "3");lruCache.put("4", "4");System.out.println(lruCache.get("1"));System.out.println(lruCache.get("2"));System.out.println(lruCache.get("3"));System.out.println(lruCache.get("4"));}}
上面的程序运行的结果将是如下,从下面的结果中可以看出缓存大小为3时,当添加第4个元素时,最新插入的元素会被删除掉。

size=1 cacheSize=3size=2 cacheSize=3size=3 cacheSize=3size=4 cacheSize=3null234



0 0
原创粉丝点击