使用HashSet作为缓存时Java中的最佳数据结构

时间:2015-06-12 05:35:16

标签: java caching concurrency guava java.util.concurrent

我的用例是:

我需要缓存一组字符串以进行频繁的读访问。缓存由守护程序线程定期更新。此外,缓存元素永远不会单独更新,它总是

set.clear();set.addAll(List)
我目前使用的HashSet受{{1}保护}}。有没有更好的方法呢?

1 个答案:

答案 0 :(得分:2)

一个选项是易变集:

private volatile Set<String> set = new HashSet<> ();

public void update() {
  Set<String> newSet = getNewData();
  set = newSet;
}

这是线程安全的(如果你不让其他代码访问集合本身)并且不需要锁定。一个缺点是你将两个集合都保存在内存中直到下一个GC(不确定每个条目使用了多少空间 - 要测试)。