LinkedHashSet实现LRU

时间:2013-06-22 21:39:30

标签: java hashmap lru

我想删除LinkedHashSet中最老的成员,我知道有一个removeEldestEntry方法我必须覆盖(Java doc for removeEldestEntry ), 但我想我必须定义我不关心的initial capacityload factor,我只想删除最近访问过的元素(这里是访问我的意思是put虽然它已经在集中或正在阅读)

有没有办法不覆盖removeEldestEntry

1 个答案:

答案 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是您定义的自定义常量。