具有元素超时的Java Collection实现

时间:2012-02-20 15:24:51

标签: java collections

是否有一些集合实现支持元素到期。

例如:

Collection<User> cachedUsers = new ExpirableList<User>(10000);

其中

public ExpirableList(final long timeout){...}

在给定时间(此特定示例中为10000ms)之后,将从集合中删除添加的元素。通过使用此功能,我们可以防止溢出cachedUsers集合。

4 个答案:

答案 0 :(得分:9)

是的,Guava支持具有定时到期的缓存。请参阅Guava Explained's page on caches

另一种选择是LRU(最近最少使用的)缓存,它在插入新元素时处理最旧的访问元素。

答案 1 :(得分:3)

你是如何尝试使用该系列并不是很清楚,但是番石榴的CacheBuilder可能对你有所帮助。

答案 2 :(得分:2)

你可以通过编写一个包装器来实现这一点,例如,TreeMap,你可以让插入时间成为关键。在每个插入中,您可以删除已经“超时”的头列表。

使用插入时间作为是否应该丢弃的指示似乎是一个坏主意。例如,最好使用一些LRU(最近最少使用的)缓存。例如,EHCache等库可以很容易地获得这样的高速缓存。 不要重新发明轮子。

相关问题:

答案 3 :(得分:2)

另一种选择是ExpiringMap

Map<String, User> users = ExpiringMap.builder()
  .expiration(10, TimeUnit.SECONDS)
  .build();