ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java集合系列-ConcurrentHashMap-put方法的全面解析

2022-10-24 12:50:46  阅读:284  来源: 互联网

标签:java 0基础Java自学之路 基础教程 教程 参考官方教程 多态的详细介绍 JavaEE系列 系列 ConcurrentHashMap put 解析 解析器


通过优锐课核心java学习笔记中,我们可以看到,码了很多专业的相关知识, 分享给大家参考学习。

本篇文章主要对put方法做一个全面的理解,里面牵涉到很多的内容,也有很多理解不到位的地方,put方法我读源码前几遍时,对大致的脉络理解了,但是对里面比较细节的处理逻辑和判断通过一遍一遍的读和理解,才有点明白,然后把它写出来和大家分享,如有错误欢迎指正,使我们共同进步,此篇文章较长,请耐心看完,但是此篇文章对扩容和线程安全的内容一笔带过,这两个重要的内容,我有专门的文章去分析。

本篇文章的主要内容如下:

1:ConcurrentHashMap的put方法(重点讲解) 2:ConcurrentHashMap的计算hash值的方法spread() 3:ConcurrentHashMap的初始化方法:initTable() 4:ConcurrentHashMap的帮助扩容方法helpTransfer() 5:ConcurrentHashMap的标识符方法resizeStamp() 6:解密很多人对:(sc >>> RESIZE_STAMP_SHIFT) != rs || sc == rs + 1 || sc == rs + MAX_RESIZERS || transferIndex <= 0的疑惑 一、ConcurrentHashMap的put方法 相对于HashMap的put方法,ConcurrentHashMap的put方法稍微复杂一点,但是如果细心的去研读,还是可以理解的。接下来我们就一起走进put方法的源码,看一下它是怎样设计的。

public V put(K key, V value) { //直接调用putValue方法 return putVal(key, value, false); } //这个方法的参数 1:key:键值对的key 2:value:键值对的value 3:onlyIfAbsent:如果为true,将不能覆盖已存在key的值。 4:evict:在HashMap中存在,但是没有实际意义,在ConcurrentHashMap中就不存在这个参数了。 final V putVal(K key, V value, boolean onlyIfAbsent) { //这一步可以看到:ConcurrentHashMap不允许null值null键,否则将抛出空指针异常。 if (key == null || value == null) throw new NullPointerException(); //$1:这一步:获取key的hash值 int hash = spread(key.hashCode()); //binCount:表示 int binCount = 0; //$2:这一步:一个无限循环, for (Node<K,V>[] tab = table;

标签:java,0基础Java自学之路,基础教程,教程,参考官方教程,多态的详细介绍,JavaEE系列,系列,ConcurrentHashMap,put,解析,解析器
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有