Java 8 Map中的putIfAbsent和computeIfAbsent有什么区别?

Java 8 Map中的putIfAbsent和computeIfAbsent有什么区别?,第1张

Java 8 Map中的putIfAbsent和computeIfAbsent有什么区别?

差异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



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5561466.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-14
下一篇2022-12-14

发表评论

登录后才能评论

评论列表(0条)

    保存