Java集合实现及其元素的超时处理

10

有没有一些支持元素过期的集合实现。

例如:

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

在哪里

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

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


看起来你正在寻找一个缓存:https://dev59.com/UGDVa4cB1Zd3GeqPfJ0t - Tomasz Nurkiewicz
3个回答

10

是的,Guava支持具有定时过期时间的缓存。请参见Guava解释中关于缓存的页面

另一种选择是LRU(最近最少使用)缓存,当插入新元素时会丢弃最早访问的元素。


3

并不是很清楚您如何使用该集合,但Guava的CacheBuilder可能会对您有帮助。


2
你可以通过编写一个包装类来实现这个功能,比如使用一个 TreeMap,其中插入时间作为键。每次插入时,你可以删除“超时”的头部列表。
然而,使用插入时间来判断是否应该删除似乎不是一个好主意。更好的方法是使用一些 LRU(最近最少使用)缓存,例如在库中很容易找到,比如 EHCache。不要重复造轮子。
相关问题:

同时提交的插入操作非常罕见,不是吗? - Oleg Mikheev
哈哈,说得好。显然的解决方案是让每个时间戳映射到一组对象 :-) - aioobe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接