我想删除LinkedHashSet中最古老的成员,我知道有一个removeEldestEntry方法必须重写(Java for removeEldestEntry),但我想我必须定义initial capacity和load factor,我不在乎,我只是想删除最近访问过的元素(在这里,access指的是在集合中或正在读取的时候是put )。
有没有办法不覆盖removeEldestEntry?
发布于 2013-06-22 22:10:52
我知道有一个removeEldestEntry方法,我必须重写
这句话是错误的,因为LinkedHashSet 有-A而不是-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 (一个类似集合的接口)的LinkedHashMap远景。
MAX_ENTRIES是您应该定义的自定义常量。
发布于 2022-09-27 19:52:39
对上述答案略加改进:
Collections.newSetFromMap(new LinkedHashMap<T, Boolean>(maxSize, 0.75f, true) {
@Override
public boolean containsKey(Object key) {
// Unfortunately, the LinkedHashMap containsKey method doesn't reset the LRU order,
// so perform a 'get' call here too
return super.containsKey(key)
&& super.get(key);
}
@Override
protected boolean removeEldestEntry(Map.Entry<T, Boolean> eldest) {
return this.size() > maxSize;
}
});https://stackoverflow.com/questions/17255572
复制相似问题