Mega Code Archive

 
Categories / Java / Development Class
 

Cache LRU

/*  * Copyright (c) 2009, TamaCat.org  * All rights reserved.  */ //package org.tamacat.util; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashMap; import java.util.Set; public class CacheLRU<K,V> {   private int maxSize;   private LinkedHashMap<K, V> cache;   private ArrayList<K> used;      public CacheLRU(int maxSize) {     this.maxSize = maxSize;     this.cache = new LinkedHashMap<K,V>(maxSize);     this.used = new ArrayList<K>(maxSize);   }      public CacheLRU() {     this(10);   }      public synchronized V get(K key) {     updateUsed(key);     return cache.get(key);   }      public synchronized V put(K key, V value) {     if (cache.size() >= maxSize && used.size() > 0) {       cache.remove(used.get(0));       used.remove(0);     }     updateUsed(key);     return cache.put(key, value);   }      private void updateUsed(K key) {     used.remove(key);     used.add(key);       }      public synchronized int size() {     return cache.size();   }      public synchronized V remove(K key) {     used.remove(key);     return cache.remove(key);   }      public synchronized void clear() {     cache.clear();     used.clear();   }      public Set<K> keySet() {     return cache.keySet();   }      public Collection<V> values() {     return cache.values();   }      @Override   public String toString() {     return getClass().getName() + "@" + hashCode() + "" + cache.toString();   } } ------------ /*  * Copyright (c) 2009, TamaCat.org  * All rights reserved.  */ package org.tamacat.util; import static org.junit.Assert.*; import org.junit.After; import org.junit.Before; import org.junit.Test; public class CacheLRUTest {   @Before   public void setUp() throws Exception {   }   @After   public void tearDown() throws Exception {   }   @Test   public void testGet() {     int maxSize = 3;     CacheLRU<String,String> cache = new CacheLRU<String,String>(maxSize);     cache.put("1", "1");     cache.put("2", "2");     cache.put("3", "3");     assertEquals(maxSize, cache.size());     //cache.get("2");     //cache.get("1");     //System.out.println(cache.toString());     cache.put("4", "4");     cache.put("5", "5");     //System.out.println(cache.toString());     assertEquals(maxSize, cache.size());   } }