参考LRU的四种写法
https://blog.csdn.net/elricboa/article/details/78847305

public class LRU<K,V> {

private static final float hashLoadFactory = 0.75f;//负载阴子
private LinkedHashMap<K,V> map;
private int cacheSize;//缓存大小

public LRU(int cacheSize) {
this.cacheSize = cacheSize;
int capacity = (int)Math.ceil(cacheSize / hashLoadFactory) + 1;
map = new LinkedHashMap<K,V>(capacity, hashLoadFactory, true){
private static final long serialVersionUID = 1;

  @Override
  protected boolean removeEldestEntry(Map.Entry eldest) {
    return size() > LRU.this.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();
}
}