1.自己想的
public class LRUCache {
public LinkedList<Integer> used=new LinkedList<Integer>();
public Map<Integer, Integer> map=new HashMap<Integer,Integer>();
public int len;
public int capacity;
public LRUCache(int capacity) {
this.capacity = capacity;
len = 0;
}
public int get(int key) {
if(map.containsKey(key)){
//System.out.println(used.toString());
used.remove((Object)key);
used.addFirst(key);
return map.get(key);
}
else{
System.out.println("没得到的元素:"+key);
return -1;
}
}
public void put(int key, int value) {
if(map.containsKey(key)){
map.put(key, value);
used.remove((Object)key);
used.addFirst(key);
}
else{
if(len<capacity){
used.addFirst(key);
map.put(key, value);
len++;
}
else{
int removedKey=used.getLast();
used.removeLast();
System.out.println("map移除结点:"+removedKey);
map.remove(removedKey);
map.put(key, value);
used.addFirst(key);
}
}
}
}
2.基于LinkedHashMap
public class LRUCache extends LinkedHashMap<Integer,Integer>{
private int maxcapacity;
public LRUCache(int capacity) {
super(capacity,0.75f,true);
this.maxcapacity=capacity;
}
public int get(int key) {
Integer vaule=super.get(key);
if(vaule==null)return -1;
else return vaule;
}
public void set(int key, int value) {
super.put(key,value);
}
protected boolean removeEldestEntry(Map.Entry<Integer,Integer> eldest)
{
return size()>maxcapacity;
}
}