基于LinkedHashMap实现Lru
import java.util.LinkedHashMap;
import java.util.Map;
/**
*
* 基于LinkedHashMap实现Lru
*/
public class LruWithLinkedHashMap<K,V> {
private static final float hashLoadFactory = 0.75f;
private LinkedHashMap<K,V> map;
private int cacheSize;
public LruWithLinkedHashMap(int cacheSize) {
this.cacheSize = cacheSize;
int capacity = (int)Math.ceil(cacheSize / hashLoadFactory) + 1;
map = new LinkedHashMap<K,V>(capacity, hashLoadFactory, true){
@Override
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > cacheSize;
}
};
}
public synchronized V get(K key) {
return map.get(key);
}
public synchronized void put(K key, V value) {
map.put(key, value);
}
public synchronized void clear() {
map.clear();
}
public synchronized int usedSize() {
return map.size();
}
public void print() {
for (Map.Entry<K, V> entry : map.entrySet()) {
System.out.print(entry.getValue() + "--");
}
System.out.println();
}
public static void main(String[] args) throws Exception {
LruWithLinkedHashMap<String,String> lru=new LruWithLinkedHashMap(20);
lru.put("1","1");
lru.put("2","2");
lru.put("3","3");
lru.print();
System.out.println(lru.usedSize());
}
}