我需要一些Java集合来保存String值,并且如果元素已经存在,则需要使用synchronized方法来添加元素(类似于addIfAbsent的是ArrayList)。收集将在繁忙的交通。此外,我想有一些超时机制,之后集合中的条目到期。超时应该是5秒左右。
对优雅解决方案的任何建议?选择没有超时机制的集合也会有所帮助。
感谢您的帮助。
答案 0 :(得分:3)
您是否希望实施某种形式的缓存机制?如果是这样,就没有必要重新发明轮子。您可以使用一些缓存实现,例如EhCache。
请看一下这个主题:similar question about collections with timeout (caches)
答案 1 :(得分:2)
将超时解释为时间值,之后将删除插入到集合中的项目,Guava Cache implementation是否适合您的需要?它不直接公开putIfAbsent
方法,但您可以使用CacheLoader
或提供Callable
来生成值(如果需要)。
String value = cache.get("key", new Callable<String>() { ... });
如果cache
不包含给定key
的值,则会调用callable。