ConcurrentHashMap.computeIfAbsent 和 ConcurrentHashMap.getOrDefault
时间: 2023-08-25 09:14:59 浏览: 215
`ConcurrentHashMap.computeIfAbsent()` 和 `ConcurrentHashMap.getOrDefault()` 都是 `ConcurrentHashMap` 中的方法,可以用来操作并发哈希表。
`computeIfAbsent()` 方法接受一个键和一个函数作为参数。如果该键尚未存在于 Map 中,该方法会将函数应用于键,并将函数返回的值存储到 Map 中。如果键已经存在,则该方法不执行任何操作。该方法具有原子性,可以确保在高并发情况下的线程安全。
`getOrDefault()` 方法接受一个键和一个默认值作为参数。如果该键存在于 Map 中,则返回与该键关联的值。否则,返回默认值。该方法也具有原子性,并且可以确保在高并发情况下的线程安全。
二者的区别在于,`computeIfAbsent()` 方法可以根据键生成一个新的值,并将其存储到 Map 中,而 `getOrDefault()` 方法只能返回已经存在于 Map 中的值或默认值。因此,`computeIfAbsent()` 方法更适用于需要动态生成值的情况,而 `getOrDefault()` 方法更适用于静态值的情况。此外,`computeIfAbsent()` 方法可能会更改 Map,而 `getOrDefault()` 方法不会更改 Map。
总之,`ConcurrentHashMap.computeIfAbsent()` 和 `ConcurrentHashMap.getOrDefault()` 都是用来操作并发哈希表的方法,具有线程安全性。它们的区别在于,前者可以根据键生成一个新的值并将其存储到 Map 中,而后者只能返回已经存在于 Map 中的值或默认值。
阅读全文