computeIfAbsent和putIfAbsent区别是三点:

1、当Key存在的时候,如果Value获取比较昂贵的话,putIfAbsent就白白浪费时间在获取这个昂贵的Value上(这个点特别注意)

2、Key不存在的时候,putIfAbsent返回null,小心空指针,而computeIfAbsent返回计算后的值

3、当Key不存在的时候,putIfAbsent允许put null进去,而computeIfAbsent不能,之后进行containsKey查询是有区别的(当然了,此条针对HashMap,ConcurrentHashMap不允许put null value进去)

4、computeIfAbsent的value是接受一个Function,而putIfAbsent是是接受一个具体的value,所以computeIfAbsent的使用应该是非常灵活的

下面代码演示:

public V putIfAbsent(K key, V value)

        ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>();System.out.println("put:" + map.putIfAbsent("hello", "123"));System.out.println(map.get("hello"));System.out.println("put:" + map.putIfAbsent("hello", "456"));System.out.println(map.get("hello"));

输入如下:

put:null
123
put:123
123

putIfAbsent会返回之前的值,如果之前不存在,则返回null;而且put一个存在的key时,并不会覆盖掉之前的key。

public V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)

        ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>();System.out.println("put:" + map.computeIfAbsent("world", s -> "java"));System.out.println(map.get("world"));System.out.println("put:" + map.computeIfAbsent("world", s -> "php"));System.out.println(map.get("world"));

输出如下:

put:java
java
put:java
java

computeIfAbsent会返回本次计算的值,同时如果put的也是一个存在的key时,也不会覆盖掉之前的key。

public V put(K key, V value)

        ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>();System.out.println("put:" + map.put("test", "python"));System.out.println(map.get("test"));System.out.println("put:" + map.put("test", "javascript"));System.out.println(map.get("test"));

输出如下:

put:null
python
put:python
javascript

put会返回之前的值,如果之前不存在,则返回null。每次put的时候,都会更新对应的key值。

总结:

是否覆盖value 返回值 返回值
put 覆盖前
putIfAbsent 覆盖前
computeIfAbsent 覆盖后

java.util.Map中put,computeIfAbsent与putIfAbsent区别相关推荐

  1. 【Intellij IDEA系列】IDEA泛型处理Unchecked assignment:'java.util.Map' to 'java.util.Maplt;'

    在 intellij idea 编辑器中,把一个Map类型的数据,强制类型转换的时候. 在中不想看到代码的如下警告的解决方法: 警告信息------------- 简单警告: Unchecked ca ...

  2. [Google Guava] 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具

    原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法.G ...

  3. JAXB和java.util.Map

    具有讽刺意味的是,可能很难在JAXB(JSR-222)中映射java.util.Map类? 在这篇文章中,我将介绍一些使其变得更容易的项目. Java模型 以下是我们将用于此示例的Java模型. 顾客 ...

  4. Cannot convert value of type ‘java.lang.String‘ to required type ‘java.util.Map‘ for property ‘param

    问题描述 若依中使用feign进行远程调用,在get请求中使用@SpringQueryMap映射对象时,映射对象的父类中带有Map<String, Object>类型的params属性时, ...

  5. nested exception is java.lang.ClassCastException: java.lang String cannot be cast to java.util.Map

    今天来此记录下自己犯了多次的错误,就是在本地服务起了之后,在页面点击看效果报错,页面显示异常,后端报错,如下: falied to handle or send message;nested exce ...

  6. mybatis异常:Could not find result map Java.util.Map 问题分析及解决

    使用mybatis时,自己或者同事踩到的坑给大家分享下,有其他问题分享的同学欢迎交流~ 现象:编译未出现异常,调用相关服务时候,出现 Could not find result map Java.ut ...

  7. Java 输出Map中元素

    前言 想要输出Map中的元素,并进行下一步处理,但是卡在了如何输出元素这块,所以经查找后,总结一下四种输出方式 程序 主程序: package TestFunction;import java.uti ...

  8. java util map,我应该如何命名java.util.Map?

    I have a java.util.Map that maps from a logical name to a set of parameters to use with that name. M ...

  9. ibatis java.util.Map作为parameterClass和resultClass(转)

     1.Map作为parameterClass 映射文件: Xml代码 <!--use Map type as parameterClass--> < select   id = ...

最新文章

  1. android中方法调用super(..)的相关知识
  2. AntD Checkbox 的三种状态处理
  3. 贝叶斯统计:Inverted Beta与Three Parameter Beta分布
  4. 手撕 CNN 经典网络之 VGGNet(PyTorch实战篇)
  5. mysql数据库建设网站,网站设计与建设-MySQL数据库【松柏书屋】
  6. 轻舟智航发布Driven-by-QCraft第三代自动驾驶硬件方案
  7. [译]ABP vNext介绍
  8. Kanvas:从您的ANTLR语法生成一个简单的IDE
  9. 【华为大咖分享】8.Focus on Value 的思考与实践精粹(后附PPT下载地址)
  10. 修ecshop品牌筛选以LOGO图片形式显示
  11. 数组去重实现的方式(越多越好)
  12. 持续交付2.0 pdf_便捷下载发布v7.2.0版本更新
  13. JAVA入门_工具类_书籍借阅日期计算
  14. 冲突域和广播域的隔离与扩展
  15. 一次Nginx 502问题解决
  16. 中国新材料产业十四五竞争格局及产销趋势研究报告2021年版
  17. Linux网络问题排查
  18. 古董笔记本GTX1050+CUDA9.2+Pytorch安装
  19. S5PV210 I2C电容触摸屏驱动
  20. IT外包:中国跃跃欲试,准备一鸣惊人——2012国际外包峰会所见所感(下)

热门文章

  1. C++ Primer 5th笔记(2)chapter 2变量和基本类型:变量声明、关键字
  2. 密码技术--椭圆曲线算法EDCSA数字签名及Go语言应用
  3. Docker Compose基本介绍
  4. 种群计数 (pop_count)
  5. 多用户使用一台计算机可设置,2012年职称计算机考试WindowsXP选择题5
  6. [WUSTCTF2020]level4
  7. JAVA_IO流四大家族(2)
  8. python之lxml处理xml
  9. 将Datatable一分为二
  10. 服务器自动登录 linux,linux下如何自动登录远程服务器?