11

我想删除 a 的最旧成员LinkedHashSet,我知道有一个removeEldestEntry方法我必须重写(Java doc for removeEldestEntry ),但我想我必须定义initial capacity并且load factor我不在乎,我只是想删除最近最少访问的元素(这里的访问是指put当它已经在集合中或被读取时)

有什么办法不覆盖removeEldestEntry吗?

4

1 回答 1

30

我知道有一个我必须重写的 removeEldestEntry 方法

这个陈述是错误的,因为LinkedHashSetHAS-ALinkedHashMap而不是 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 的接口)的Set愿景。LinkedHashMapremoveEldestEntry

MAX_ENTRIES作为您将定义的自定义常量。

于 2013-06-22T22:10:52.590 回答