Guava:Cache.asMap()。remove()更好吗?

时间:2017-04-14 08:03:41

标签: guava google-guava-cache

我想得到&从Cache

中删除项目
final Cache<String, PendingRequest> pendingRequest = CacheBuilder.newBuilder().build();

// get first
pendingCall = pendingRequest.getIfPresent(key);
pendingRequest.invalidate(key); // then remove.

我还找到了另一种方式

pendingCall = pendingRequest.asMap().remove(key);

asMap方法是否克隆了所有项目?这是一个沉重的电话?如果考虑绩效,哪种方式更好。

1 个答案:

答案 0 :(得分:2)

这些调用之间没有真正的区别,因为Cache#asMap()被定义为:

  

将此缓存中存储的条目视图作为线程安全映射返回。 对地图所做的修改会直接影响缓存

调用asMap() 可能性能稍差(因为可能需要创建视图)但时间是恒定的(并且可忽略不计)并且是实现细节(请参阅内部番石榴) LocalCache and LocalManualCache classes了解更多详情)。

更重要的是,Cache#invalidate(K)更具惯用性,如果您不需要退货,我建议您使用它而非地图查看方法(在@BenManes'评论后编辑)与键关联的值,否则使用地图视图。