LinkedHashSet实现LRU

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

有没有办法不覆盖removeEldestEntry

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

由于LinkedHashSet HAS-A LinkedHashMap而不是IS-A,因此该语句是错误的。

您可以使用有用的(虽然不是众所周知的) Collections.newSetFromMap方法:

 Set mySet = Collections.newSetFromMap(new LinkedHashMap(){ protected boolean removeEldestEntry(Map.Entry eldest) { return size() > MAX_ENTRIES; } }); 

因此,它将返回一个实现自定义removeEldestEntry方法的LinkedHashMap (类似Set的接口)的Set愿景。

MAX_ENTRIES是您定义的自定义常量。