LinkedHashSet实现LRU

Ari*_*deh 8 java hashmap lru

我想删除的最年长的成员LinkedHashSet,我知道有一个removeEldestEntry,我要重写(方法为removeEldestEntry的Java文档 ),但我想我必须定义initial capacityload factor我不在乎,我只是想删除最近访问过的元素(这里通过访问我的意思是put当它已经在集合中或被读取时)

有没有办法不覆盖removeEldestEntry

Mik*_*378 22

我知道有一个我必须覆盖的removeEldestEntry方法

这个陈述是错误的,因为LinkedHashSetHAS-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;
    }
});
Run Code Online (Sandbox Code Playgroud)

因此,它将返回实现自定义方法SetLinkedHashMap(类似Set的界面)的愿景removeEldestEntry.

MAX_ENTRIES 是你定义的自定义常量.

  • 太精彩了!现在使用 Java 13 及更高版本,还有其他方法来创建 LRU 集吗? (2认同)