一、put()方法

1. 源码分析

Java中并未给出put()的源码,因此我们看一下put()方法中给出的注释:

Associates the specified value with the specified key in this map (optional operation). If the map previously contained a mapping for the key, the old value is replaced by the specified value. (A map m is said to contain a mapping for a key k if and only if m.containsKey(k) would return true.)

翻译过来就是:将key与value映射,如果在此之前存在以key为名称的映射对,则用新映射替换原来的旧映射。

2. 用法

Map<Integer, Integer>map = new HashMap<>(); // 定义一个map
map.put(1,2);           // 其中1是key,2是value


二、putIfAbsent()

Map容器内putIfAbsent()方法的源码:

1. 源码分析

    default V putIfAbsent(K key, V value) {V v = get(key);  // 首先调用get(key)方法,查看map中是否已经存在key值相同的键值对if (v == null) {   // 如果不存在,则调用put()方法插入键值对v = put(key, value);}return v;          // 返回该键值对}

也就是说,putIfAbsent()的作用是为map赋初值。


2. 用法

Map<Integer, Integer>map = new HashMap<>(); // 定义一个map
map.putIfAbsent(1,0);// 查看key为1的值是否存在,如果不存在,将其value的值初始化为0

扩展用法:若映射不存在,则建立映射,并赋初值,若存在,则进行其他操作

Map<Integer, Integer>map = new HashMap<>(); // 定义一个map
if(map.putIfAbsent(1,0) == null) System.out.println("该映射不存在,建立映射并赋初值");
else {System.out.println("该映射存在,进行其他操作");
}


三、二者区别

put()方法的作用是为map赋值,当存在相同的键值对时,会用新值覆盖旧值。
putIfAbsent()的作用是是为map赋初值,若存在相同的键值对,则不会进行操作。

【易懂】Java源码角度分析put()与putIfAbsent()的区别——源码分析系列相关推荐

  1. 从源码角度拆解SpringSecurity之C位的AuthenticationManager

    从源码角度拆解SpringSecurity系列文章 从源码角度拆解SpringSecurity之核心流程 从源码角度拆解SpringSecurity之万能的SecurityBuilder 从源码角度拆 ...

  2. 从源码角度分析MapReduce的map-output流程

    文章目录 前言 流程图 源码分析 1 runNewMapper方法 2.NewOutputCollector方法 2.1 createSortingCollector方法 2.1.1 collecto ...

  3. 【Android 插件化】Hook 插件化框架 ( 从源码角度分析加载资源流程 | Hook 点选择 | 资源冲突解决方案 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  4. Java字节码角度分析多态原理 ——提升硬实力8

    在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下. 1.Java字节码的一段旅行经历--提升硬实力1 2.Java字节码角度分析a++ --提升硬实力2 3.Java字节 ...

  5. Java字节码角度分析:Synchronized ——提升硬实力11

    在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下. 1.Java字节码的一段旅行经历--提升硬实力1 2.Java字节码角度分析a++ --提升硬实力2 3.Java字节 ...

  6. Java字节码角度分析方法调用 ——提升硬实力7

    在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下. 1.Java字节码的一段旅行经历--提升硬实力1 2.Java字节码角度分析a++ --提升硬实力2 3.Java字节 ...

  7. Mybatis底层原理学习(二):从源码角度分析一次查询操作过程

    在阅读这篇文章之前,建议先阅读一下我之前写的两篇文章,对理解这篇文章很有帮助,特别是Mybatis新手: 写给mybatis小白的入门指南 mybatis底层原理学习(一):SqlSessionFac ...

  8. 【Java 并发编程】线程池机制 ( 线程池执行任务细节分析 | 线程池执行 execute 源码分析 | 先创建核心线程 | 再放入阻塞队列 | 最后创建非核心线程 )

    文章目录 一.线程池执行任务细节分析 二.线程池执行 execute 源码分析 一.线程池执行任务细节分析 线程池执行细节分析 : 核心线程数 101010 , 最大小成熟 202020 , 非核心线 ...

  9. java异常 字节码,Java字节码角度分析异常处理

    目录 从字节码角度来分析:异常处理 1.1 异常-catch // 从字节码角度来分析:异常处理 public class T13_ByteAnalyseException { public stat ...

最新文章

  1. SQL 中的 AND OR
  2. python函数 一
  3. Vijos P1756 数字反转【进制】
  4. jQuery验证用户名是否可用
  5. 字体图标 —— IconMoon
  6. 图书管理员【2017年普及组第二题】
  7. [译]机器人操作系统简介:终极机器人应用框架(上)
  8. git在远程关联和push时出现问题
  9. [Perforce]password (P4PASSWD) invalid or unset. 的错误解决
  10. 国产操作系统往事:四十年激变,终再起风云
  11. 算法——排序——归并排序图解动画
  12. 微博认证怎么弄黄v:微博兴趣认证指定领域
  13. WordPiece 和 BPE 的区别
  14. Win10系统Ctrl键锁定无法使用解决方法
  15. 小米怎么解锁,有什么相关教程
  16. python虚拟串口_python 虚拟串口通信
  17. 以AI赋能企业数智化转型 容联“云端”服贸会完美收官
  18. 【unity 3d】--- 瞄准镜效果
  19. 用C#下的Raw Socket编程实现网络封包监视(摘录)
  20. Web安全—文件上传漏洞

热门文章

  1. 用FlatBuffers提升Android平台上Facebook的性能
  2. 微服务下分布式事务模式的详细对比
  3. 若只让我推荐一名LiveVideoStackCon上海的讲师,就是他
  4. 海外弱网下的在线视频平台优化实践​
  5. AVIO内存输入模式
  6. 技术人的少年感,和年龄无关。
  7. 设置vim打开文件光标指在上次退出位置
  8. valgrind 常见错误提示信息
  9. TensorFlow文件操作
  10. redis的事务总结