Java 8 Map中的putIfAbsent和computeIfAbsent有什么区别?
他们读了一篇有趣的文章,声称这两个功能之间的区别是:
如果Map中尚未存在指定的Key,则两个函数都希望添加一个元素。
putIfAbsent添加具有指定值的元素,而computeIfAbsent添加具有使用键计算的值的元素。
http://www.buggybread.com/2014/10/java-8-difference-between-
map.html
和
我们已经看到,putIfAbsent消除了必须定义if语句的必要方法,但是如果获取Java文章确实会损害我们的性能呢?
为了对此进行优化,我们在真正确定需要它们之前不希望获取文章-这意味着我们需要在获取文章之前先了解密钥是否缺失。
http://www.deadcoderising.com/2017-02-14-java-8-declarative-ways-of-
modifying-a-map-using-compute-merge-and-
replace/
我还没准备好理解有什么区别,请您进一步详细说明这两个功能?
-
差异1
computeIfAbsent
采用映射函数,如果缺少键,则调用该函数以获取值。putIfAbsent
直接取值。如果获取该值很昂贵,那么
putIfAbsent
如果密钥已经存在,那就浪费了。常见的“昂贵”值例如
new ArrayList<>()
用于创建时Map<K, List<V>>
,其中在键已经存在时创建新列表(然后丢弃新列表)会产生不必要的垃圾。
差异#2
computeIfAbsent
返回“与指定键关联的当前(现有或计算得出的)值,如果计算出的值为null,则返回null”。putIfAbsent
返回“与指定键关联的先前值;如果键没有映射,则返回null”。因此,如果键已经存在,则它们返回相同的值,但是如果键丢失,则
computeIfAbsent
返回计算值,而putIfAbsent
返回null。
差异#3
两种方法都将“缺少”定义为缺少键或现有值为null,但是:
computeIfAbsent
如果不存在该键,则不会放置null值。putIfAbsent
即使缺少键,也将放置该值。以后对
computeIfAbsent
,putIfAbsent
和的get
调用没有区别,但对像getOrDefault
和的调用却有区别containsKey
。
-
Java 8 中的 map() 和 flatMap() 方法有什么区别?
2022-03-22 关注 0 浏览40 1答案
-
Java 8中的map()和flatMap()方法之间有什么区别?
2021-02-02 关注 0 浏览126 1答案
-
Java中的HashMap和Map对象之间有什么区别?
2021-02-02 关注 0 浏览82 1答案
-
map里面[]和 at 有什么区别
2022-09-21 关注 0 浏览14 0答案
-
Map和WeakMap有什么区别?
2021-01-11 关注 0 浏览224 0答案
-
map和forEach有什么区别?
2021-01-11 关注 0 浏览200 0答案
-
说说set和map有什么区别?
2021-01-11 关注 0 浏览253 1答案
-
for 循环和 map 循环有什么区别?
2022-09-20 关注 0 浏览30 5答案
-
使用hadoop和Java命令执行map-reduce作业之间有什么区别
2021-01-30 关注 0 浏览102 1答案
-
Java中的&和&&有什么区别?
2022-07-28 关注 0 浏览16 1答案