putIfAbsent和computeIfAbsent
时间: 2023-03-14 11:32:44 浏览: 112
这两个方法都是Java 8中的Map接口的新增方法,它们都可以在Map中添加新的键值对,但是它们之间有一些不同:putIfAbsent会检查Map中是否已存在指定的键,如果不存在,则添加新的键值对;而computeIfAbsent会检查Map中是否存在指定的键,如果不存在,则使用给定的Function来计算新的值,并将其添加到Map中。
相关问题
computeIfAbsent和putifabsent
`computeIfAbsent` 和 `putIfAbsent` 都是 Java 中 Map 接口的两个方法,它们都用于处理键值对,但有微妙的区别。
1. **computeIfAbsent(key, function)**: 这个方法首先检查指定的 key 是否已经在 map 中存在。如果不存在,它会应用提供的 `function` 函数来计算并添加一个新的值(key-value 对)。如果键已经存在,它将直接返回该键对应的当前值,而不会执行函数。这常用于缓存计算结果,避免重复计算。
2. **putIfAbsent(key, value)**: 这个方法则是尝试直接将给定的 key-value 对插入到 map 中。如果这个 key 已经存在于 map 中,那么 put 就不会成功,map 的状态不变,不会返回任何值;但如果 key 不存在,put 将会添加新的键值对并返回 null。
总结一下:
- `computeIfAbsent` 可能改变 map 内容,并返回值(如果 key 不存在的话),适用于需要依赖其他值来初始化新值的情况。
- `putIfAbsent` 不改变 map 内容,仅当 key 不存在时才会添加,并返回 null(表示操作成功)。
computeifabsent和putifabsent
`computeIfAbsent`和`putIfAbsent`都是Map接口中的方法,用于在Map中添加键值对。它们的区别在于,当Map中已经存在指定的键时,`putIfAbsent`方法不会进行任何操作,而`computeIfAbsent`方法会根据指定的函数计算一个新的值并将其与键关联。
下面是两个方法的示例代码:
1. `putIfAbsent`方法示例:
```java
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.putIfAbsent("banana", 2);
map.putIfAbsent("apple", 3);
System.out.println(map); // 输出:{apple=1, banana=2}
```
2. `computeIfAbsent`方法示例:
```java
Map<String, List<String>> map = new HashMap<>();
map.computeIfAbsent("fruits", k -> new ArrayList<>()).add("apple");
map.computeIfAbsent("fruits", k -> new ArrayList<>()).add("banana");
System.out.println(map); // 输出:{fruits=[apple, banana]}
```
在第一个示例中,`putIfAbsent`方法只在Map中不存在"banana"键时才将其添加到Map中,而对于已经存在的"apple"键,不会进行任何操作。
在第二个示例中,`computeIfAbsent`方法会根据"fruits"键是否存在来判断是否需要计算一个新的值。由于"fruits"键在Map中不存在,因此会根据指定的函数创建一个新的ArrayList,并将其与"fruits"键关联。接着,"apple"和"banana"元素会被添加到这个ArrayList中。
阅读全文