computeIfAbsent 和 putIfAbsent 区别有三点:
当 Key 存在的时候,如果 Value 获取比较昂贵的话,putIfAbsent 就白白浪费时间在获取这个昂贵的 Value 上(这个点特别注意)
Key 不存在的时候,putIfAbsent 返回 null,小心空指针,而 computeIfAbsent 返回计算后的值
当 Key 不存在的时候,putIfAbsent 允许 put null 进去,而 computeIfAbsent 不能,之后进行 containsKey 查询是有区别的(当然了,此条针对 HashMap,ConcurrentHashMap 不允许 put null value 进去)