computeIfAbsent vs putIfAbsent

Fri, Mar 4, 2022 One-minute read

putIfAbsent vs computeIfAbsent

putIfAbsent

putIfAbsent() 方法会先判断指定的键(key)是否存在,不存在则将键/值对插入到 HashMap 中。

如果所指定的 key 已经在 HashMap 中存在,返回和这个 key 值对应的 value, 如果所指定的 key 不在 HashMap 中存在,则返回 null, putIfAbsent 的重点不在于返回值, 而在于如果 key 不为空, 就不插入新值了

如果 Map <K, List<V>> 如果 key 已经存在了,用 putIfAbsent 会新创造一个新的 list 后再丢弃,产生不不要的垃圾。

如果 key 存在,他们返回是一样的,当时如果 key 不存在, 这个返回 null, computeIfAbsent 返回 输入的值;

另外 key 不存在, 这个会输入一个 null 的值,后面则不可以

computeIfAbsent

有个 mapping 的功能

Map<String,ValueClass>,

putIfAbsent(“key”, new ValueClass()) 马上创建一个 实例,哪怕 key 存在了

computerIfAbsent(“key”, k -> new ValueClass()) 只会在 key 不存在 或者 key 的值为 null 才会执行, 所以相对效率较高

效率点

如果已经有值,用 putIfAbsent; 如果这个值是非常贵的操作,比如要去 database 去找,用 computeIfAbsent