我想删除LinkedHashSet
中最老的成员,我知道有一个removeEldestEntry
方法我必须覆盖(Java doc for removeEldestEntry
),
但我想我必须定义我不关心的initial capacity
和load factor
,我只想删除最近访问过的元素(这里是访问我的意思是put
虽然它已经在集中或正在阅读)
有没有办法不覆盖removeEldestEntry
?
答案 0 :(得分:19)
我知道有一个removeEldestEntry方法,我必须覆盖
此声明错误,因为LinkedHashSet
HAS-A LinkedHashMap
而不是IS-A。
您可以使用有用的(虽然不是众所周知的)Collections.newSetFromMap方法:
Set<String> mySet = Collections.newSetFromMap(new LinkedHashMap<String, Boolean>(){
protected boolean removeEldestEntry(Map.Entry<String, Boolean> eldest) {
return size() > MAX_ENTRIES;
}
});
它将返回Set
实现您的自定义LinkedHashMap
方法的removeEldestEntry
(类似Set的界面)的愿景。
MAX_ENTRIES
是您定义的自定义常量。