java - removeEldestEntry(Map.Entry eldest) 不工作
java - removeEldestEntry(Map.Entry eldest) not working
当我使用removeEldestEntry(Map.Entry eldest)
实现LRU缓存时removeEldestEntry(Map.Entry eldest)
不起作用。
预期输出= 1,-1,2
实际输出 = 1,1,2
此处设置方法放置条目,get 检索条目(如果存在),否则 return -1:
import java.util.*;
import java.lang.*;
import java.io.*;
class LRUCache extends LinkedHashMap {
int capacity;
LinkedHashMap map = new LinkedHashMap(capacity ,1.1f,true);
public LRUCache(int capacity) {
this.capacity = capacity;
}
public int get(int key) {
if(map.containsKey(key)) {
return (int) map.get(key);
}
return -1;
}
public void set(int key, int value) {
map.put(key,value);
}
protected boolean removeEldestEntry(Map.Entry eldest) {
return map.size()>capacity;
}
public static void main(String args[]) {
LRUCache lru=new LRUCache(1);
int temp;
lru.set(2,1);
temp=lru.get(2);
System.out.println(temp);
lru.set(3,2);
temp=lru.get(2);
System.out.println(temp);
temp=lru.get(3);
System.out.println(temp);
}
}
您的 removeEldestEntry
从未使用过。为了使用您的 removeEldestEntry
,您的 class 必须扩展 LinkedHashMap
并且您应该覆盖 LinkedHashMap
的 removeEldestEntry
.
如果您为缓存使用 LinkedHashMap
,它将使用 removeEldestEntry
的默认实现,即:
protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
return false;
}
当我使用removeEldestEntry(Map.Entry eldest)
实现LRU缓存时removeEldestEntry(Map.Entry eldest)
不起作用。
预期输出= 1,-1,2
实际输出 = 1,1,2
此处设置方法放置条目,get 检索条目(如果存在),否则 return -1:
import java.util.*;
import java.lang.*;
import java.io.*;
class LRUCache extends LinkedHashMap {
int capacity;
LinkedHashMap map = new LinkedHashMap(capacity ,1.1f,true);
public LRUCache(int capacity) {
this.capacity = capacity;
}
public int get(int key) {
if(map.containsKey(key)) {
return (int) map.get(key);
}
return -1;
}
public void set(int key, int value) {
map.put(key,value);
}
protected boolean removeEldestEntry(Map.Entry eldest) {
return map.size()>capacity;
}
public static void main(String args[]) {
LRUCache lru=new LRUCache(1);
int temp;
lru.set(2,1);
temp=lru.get(2);
System.out.println(temp);
lru.set(3,2);
temp=lru.get(2);
System.out.println(temp);
temp=lru.get(3);
System.out.println(temp);
}
}
您的 removeEldestEntry
从未使用过。为了使用您的 removeEldestEntry
,您的 class 必须扩展 LinkedHashMap
并且您应该覆盖 LinkedHashMap
的 removeEldestEntry
.
如果您为缓存使用 LinkedHashMap
,它将使用 removeEldestEntry
的默认实现,即:
protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
return false;
}