package com.baselet.util; import java.util.LinkedHashMap; /** * Simple cache based on a LinkedHashMap * * @param <K> Key * @param <V> Value */ public class LRUCache<K, V> extends LinkedHashMap<K, V> { private static final long serialVersionUID = 1L; private static final float LOAD_FACTOR = 0.8f; private final int cacheSize; /** * * @param cacheSize how many elements should fit in the cache (the actual capacity of the map may be bigger) */ public LRUCache(int cacheSize) { super((int) ((cacheSize + 1) / LOAD_FACTOR) + 1, LOAD_FACTOR, true); this.cacheSize = cacheSize; } @Override protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) { // if size >= capacity * loadfactor then rehashing occurs (see implementation of LinkedHashMap.addEntry) // this method is called before the size check, therefore remove the eldest entry if the threshold is reached return size() >= this.cacheSize; }; }