实现1,通过linkedHashMap实现
public class LRUCache1<T,K> {
private Map<T,K> map;
private int size;
public LRUCache1(int size) {
this.size = size;
map = new LinkedHashMap<>(size);
}
public K get(T t) {
if (!map.containsKey(t)) {
return null;
}
K temp = map.get(t);
map.remove(t);
map.put(t,temp);
return temp;
}
public void put(T t,K k) {
if (map.size() >= size) {
Set<T> set = map.keySet();
map.remove(set.iterator().next());
}
map.put(t,k);
}
public int getSize() {
return map.size();
}
@Override
public String toString() {
return map.toString();
}
public static void main(String[] args) {
LRUCache1<Integer,Integer> lruCache1 = new LRUCache1<>(3);
lruCache1.put(1,1);
lruCache1.put(2,2);
lruCache1.put(3,3);
System.out.println(lruCache1);
lruCache1.put(4,4);
System.out.println(lruCache1);
}
}
实现2,复写linkedHashMap
public class LRUCache2<T,K> {
private Map<T,K> map;
private int size;
public LRUCache2(int size) {
this.size = size;
map = new LinkedHashMap<T, K>(size,0.75f,true) {
@Override
protected boolean removeEldestEntry(Map.Entry<T, K> eldest) {
return getSize() > size;
}
};
}
public K get(T t) {
return map.get(t);
}
public void put(T t,K k) {
map.put(t,k);
}
public int getSize() {
return map.size();
}
@Override
public String toString() {
return map.toString();
}
public static void main(String[] args) {
LRUCache2<Integer,Integer> lruCache1 = new LRUCache2<>(3);
lruCache1.put(1,1);
lruCache1.put(2,2);
lruCache1.put(3,3);
System.out.println(lruCache1);
lruCache1.put(4,4);
System.out.println(lruCache1);
}
}