import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
/**
* Created by gpzpati on 3/3/14.
*/
public class LRUCache {
private final int maxSize;
private ConcurrentHashMap map;
private ConcurrentLinkedQueue queue;
public LRUCache(final int maxSize) {
this.maxSize = maxSize;
map = new ConcurrentHashMap(maxSize);
queue = new ConcurrentLinkedQueue();
}
/**
* @param key - may not be null!
* @param value - may not be null!
*/
public void put(final Key key, final Value value) {
if (map.containsKey(key)) {
queue.remove(key); // remove the key from the FIFO queue
}
while (queue.size() >= maxSize) {
Key oldestKey = queue.poll();
if (null != oldestKey) {
map.remove(oldestKey);
}
}
queue.add(key);
map.put(key, value);
}
/**
* @param key - may not be null!
* @return the value associated to the given key or null
*/
public Value get(final Key key) {
return map.get(key);
}
public static void main(String[] argv){
LRUCache lruCache = new LRUCache(3);
lruCache.put("Sunil","36");
lruCache.put("Leena","31");
lruCache.put("Jiya","7");
System.out.println(lruCache.get("Sunil"));
lruCache.put("Navya","2");
System.out.println(lruCache.get("Sunil"));
}
}
Friday, March 7, 2014
Implementing Least recently used (LRU) cache in Java
Subscribe to:
Posts (Atom)