11.4. java.util.concurrent.ConcurrentMap 和 javax.cache.Cache API 的比较


以下是 java.util.concurrent.ConcurrentMapjavax.cache.Cache API 提供的数据操作 API 的简要比较。

Expand
操作java.util.concurrent.ConcurrentMap<K, V>javax.cache.Cache<K, V>

存储且没有返回

不适用 

void put (K key)

存储和返回之前的值

v put (K key)

V getAndPut(K key)

如果不存在存储

v putIfAbsent (K key, V value)

布尔值 putIfAbsent (K key, V value)

检索

v get (Object key)

v get (K key)

如果存在删除

v remove (Object key)

布尔值删除(K 键)

删除并返回之前的值

v remove (Object key)

v getAndRemove (K key)

删除条件

boolean remove (Object key, Object value)

布尔值 remove (K key, V oldValue)

如果存在,替换

v replace (K key, V value)

boolean replace (K key, V value)

替换并返回之前的值

v replace (K key, V value)

v getAndReplace (K key, V value)

替换条件

boolean replace (K key, V oldValue, V newValue)

boolean replace (K key, V oldValue, V newValue)

比较两个 API,最好看到:在可能的情况下,JCache 避免返回之前的值以避免操作昂贵的网络或 IO 操作。这是 JCache API 设计中的覆盖原则。实际上,java.util.concurrent.ConcurrentMap 中存在一组操作,但没有出现在 javax.cache.Cache 中,因为它们在分布式缓存中进行计算的成本。唯一的例外是迭代缓存的内容:

Expand
操作java.util.concurrent.ConcurrentMap<K, V>javax.cache.Cache<K, V>

计算缓存的大小

int size()

 不适用

返回缓存中的所有密钥

Set<K> keySet()

 不适用

返回缓存中的所有值

collection<V> values ()

 不适用

返回缓存中的所有条目

Set<Map.Entry<K, V>> entrySet()

 不适用

迭代缓存

在 keySet、value 或 entrySet 上使用 iterator () 方法

Iterator<Cache.Entry<K, V>> iterator()

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部