
Java
Java 8中的Map接口提供了两个方法,putIfABSent和computeIfABSent,用于在向Map中插入元素时进行条件判断。这两个方法的作用类似,但有一些区别。
putIfABSent方法用于向Map中插入键值对,但只有在指定的键不存在时才会执行插入操作。如果指定的键已经存在于Map中,则putIfABSent方法不会进行任何操作,并返回已存在的值。下面是一个示例代码:JavaMap<String, String> map = new HashMap<>();map.put("key1", "value1");String oldValue = map.putIfABSent("key1", "value2");System.out.println(oldValue); // 输出:value1String newValue = map.putIfABSent("key2", "value2");System.out.println(newValue); // 输出:value2System.out.println(map); // 输出:{key1=value1, key2=value2}在上面的例子中,我们首先向Map中插入了一个键值对"key1"-"value1"。然后使用putIfABSent方法尝试插入键值对"key1"-"value2",由于"key1"已经存在于Map中,所以putIfABSent方法不会执行插入操作,并返回已存在的值"value1"。接着使用putIfABSent方法插入键值对"key2"-"value2",由于"key2"不存在于Map中,所以putIfABSent方法会执行插入操作,并返回插入的值"value2"。最后输出Map中的内容,可以看到两个键值对都成功插入。computeIfABSent方法也用于向Map中插入键值对,但与putIfABSent方法不同的是,computeIfABSent方法允许我们在插入之前对值进行计算。如果指定的键不存在于Map中,computeIfABSent方法会执行计算操作,并将计算得到的值插入到Map中。下面是一个示例代码:JavaMap<String, Integer> map = new HashMap<>();map.put("key1", 1);Integer oldValue = map.computeIfABSent("key1", key -> key.length());System.out.println(oldValue); // 输出:1Integer newValue = map.computeIfABSent("key2", key -> key.length());System.out.println(newValue); // 输出:4System.out.println(map); // 输出:{key1=1, key2=4}在上面的例子中,我们首先向Map中插入了一个键值对"key1"-1。然后使用computeIfABSent方法尝试插入键值对"key1"-"value2",由于"key1"已经存在于Map中,所以computeIfABSent方法不会执行插入操作,并返回已存在的值1。接着使用computeIfABSent方法插入键值对"key2"-"value2",由于"key2"不存在于Map中,所以computeIfABSent方法会执行计算操作,计算得到的值是"key2"的长度4,并将键值对"key2"-4插入到Map中。最后输出Map中的内容,可以看到两个键值对都成功插入。putIfABSent和computeIfABSent方法都是用于向Map中插入键值对的方法,但putIfABSent方法只在指定的键不存在时执行插入操作,而computeIfABSent方法允许我们在插入之前对值进行计算。根据具体的需求选择合适的方法可以提高代码的清晰度和执行效率。Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号