LinkedHashSet实现LRU
我想删除LinkedHashSet
最老的成员,我知道有一个removeEldestEntry
方法我必须覆盖( Java doc for removeEldestEntry ),但我想我必须定义initial capacity
和load factor
,我不关心和我只想删除最近访问过的元素(这里通过访问我的意思是当它已经在集合中或被读取时被put
)
有没有办法不覆盖removeEldestEntry
?
我知道有一个我必须覆盖的removeEldestEntry方法
由于LinkedHashSet
HAS-A LinkedHashMap
而不是IS-A,因此该语句是错误的。
您可以使用有用的(虽然不是众所周知的) Collections.newSetFromMap方法:
Set mySet = Collections.newSetFromMap(new LinkedHashMap(){ protected boolean removeEldestEntry(Map.Entry eldest) { return size() > MAX_ENTRIES; } });
因此,它将返回一个实现自定义removeEldestEntry
方法的LinkedHashMap
(类似Set的接口)的Set
愿景。
MAX_ENTRIES
是您定义的自定义常量。