📅  最后修改于: 2023-12-03 15:31:59.802000             🧑  作者: Mango
computeIfAbsent(Key, 函数)
方法及示例Java中的computeIfAbsent(Key, 函数)
方法是ConcurrentHashMap
类中的一个方法,它可以用来在Map中加入一个新的键值对,如果对应键已经存在,则不做任何操作。它的方法签名如下:
default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
其中:
key
:要查找或添加的Map的键。mappingFunction
:如果该键在Map中不存在,则用该函数生成要添加的值。这个函数也被称为“惰性初始化”函数,因为它只有在键不存在时才调用。该方法能够很好地实现缓存的功能,允许程序员定义一个生成值的函数,并且只有在需要时才生成值。
下面是一个示例展示了computeIfAbsent
方法是如何被使用的:
import java.util.HashMap;
import java.util.Map;
class MyClass {
private final Map<Integer, String> map;
public MyClass() {
map = new HashMap<>();
}
public String getValue(int key) {
return map.computeIfAbsent(key, k -> createNewValue(k));
}
private String createNewValue(Integer key) {
String value = "Value_" + key;
System.out.println("Created new value: " + value);
return value;
}
}
public class Main {
public static void main(String[] args) {
MyClass myClass = new MyClass();
System.out.println(myClass.getValue(1));
System.out.println(myClass.getValue(2));
System.out.println(myClass.getValue(1));
}
}
在这个例子中,我们创建了一个MyClass
类,该类建立了一个Map对象,然后实现了getValue
方法。如果该方法的参数key在map中不存在,则调用createNewValue
方法以生成一个新的键值对。如果该方法的参数key已经存在于map中,则返回对应的值而不调用createNewValue
方法。
下面是程序运行的输出结果:
Created new value: Value_1
Value_1
Created new value: Value_2
Value_2
Value_1
我们可以看到,在第一次请求getValue
方法时,createNewValue
方法被调用,并且生成了新的键值对。在接下来的两次请求中,getValue
方法直接返回了已经添加到Map所对应的值。
总之,computeIfAbsent(Key, 函数)
方法使得我们能够方便地向Map对象添加新的键值对,并且不会重复添加已经存在的键。