栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/570221.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号