ConcurrentHashMap源码学习

news2024/11/17 0:20:05

实现接口

       ConcurrentMap(Map的基础方法)、Serializable(序列化)

基础属性

最大容量:2^30

默认容量:16

 常用方法

PUT

调用PutVal方法进行插入。

判断key或value是否为空:

是:抛出空指针一场

否:将key的哈希值的上下16位进行异或,是哈希值更散列

        判断节点数组是否为空:

        是:初始化节点数组,并将容量恢复至默认容量16

        否:利用tabAt方法获取hash分配位置的值,如果节点值为null,则利用casTabAt方法将新节点插入到当前位置

        否:hash分配位置的Hash值为-1(转发节点),则调用helpTransfer方法(在调整大小中进行传输)

        否:onlyIfAbsent为true,hash分配位置的节点与插入节点的key相同,且value不为null,返回当前hash位置的value;

        否:给到当前位置节点加锁,判断当前位置节点是否改变

                否:当前位置的hash值是否大于等于0(表示正常节点哈希的可用位),寻找key是否已存在,已存在则判断onlyIfAbsent是否为false,寻找过程中binCount(链表深度)会随着每一次循环加1

                        是:将目标值替换旧值

                        break跳出循环;

                        不存在则将目标节点添加到末尾

                如果当前hash位置的节点是树类型的节点,调用putTreeVal方法来查找和插入节点(先判断节点是否存在,存在则返回节点,不存在则插入当前节点并返回null),返回值不为null则判断onlyIfAbsent是否为false

                        是:将目标值替换旧值

                        break跳出循环;

                如果当前hash位置的节点是ReservationNode类型则抛出异常

throw new IllegalStateException("Recursive update")

      如果binCount不等于0

                binCount大于8:将所有节点转换成树节点

                旧值(相同key)不为null,返回旧值。

调用account将binCount添加到计数中,为下次调整做准备。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1352654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系列六、RestTemplate

一、RestTemplate 1.1、概述 RestTemplate是一种便捷的访问RestFul服务的模板类,是Spring提供的用于访问Rest服务的客户端模板工具集,它提供了多种便捷访问远程HTTP服务的方法。 1.2、API https://docs.spring.io/spring-framework/docs/5.2.2.RELEASE…

【中小型企业网络实战案例 七】配置限速

相关学习文章: 【中小型企业网络实战案例 一】规划、需求和基本配置 【中小型企业网络实战案例 二】配置网络互连互通【中小型企业网络实战案例 三】配置DHCP动态分配地址 【中小型企业网络实战案例 四】配置OSPF动态路由协议【中小型企业网络实战案例 五】配置可…

听GPT 讲Rust源代码--compiler(1)

File: rust/compiler/rustc_errors/src/diagnostic_builder.rs 在Rust编译器源代码中,rust/compiler/rustc_errors/src/diagnostic_builder.rs文件的作用是定义错误和警告的构建器,用于生成编译器诊断信息。这个文件是Rust编译器错误报告系统的一部分&am…

8个超高清图片素材网站,免费下载,真的很实用~

图片真的是我们日常生活中必不可少的一部分,大到工作,小到发朋友圈都需要配图,那除了自己拍摄之外,哪里还能找到精美又高清的图片素材呢?本期就给大家整理了8个可免费下载的图片素材网站,真的免费下载&…

【JAVA】AI医疗导诊系统源码

智能导诊系统是一种基于人工智能和大数据技术开发的医疗辅助软件,它能够通过对患者的症状、病史等信息进行计算分析,快速推荐科室和医生。通过简单的描述自身症状,系统即可找到最适合的科室,实现线上高效挂号,线下门诊…

Acrel-EIoT能源物联网云平台助力电力物联网数据服务 ——安科瑞 顾烊宇

摘要:Acrel-EIOT能源物联网云平台是一个结合在线销售的互联网商业模式,为分布广泛的互联网用户提供PAAS服务的平台。安科瑞物联网产品安装完成后,用户可以通过手机扫描代码轻松实现产品访问平台,无需注意调试和平台运行过程&#…

tp5 console.php 里的Console类的init();

1 加载的默认配置文件:/www/wwwroot/xxx/thinkphp/convention.php 3 CONF_PATH 和EXE /www/wwwroot/xxx/thinkphp/base.php 里定义的常量 is_file() 检查指定的文件名是否是正常的文件。 CONF_PATH . command . EXT 路径是:/www/wwwroot/xxx/applicati…

【华为机试】2023年真题B卷(python)-考古问题

一、题目 题目描述: 考古问题,假设以前的石碑被打碎成了很多块,每块上面都有一个或若干个字符,请你写个程序来把之前石碑上文字可能的组合全部写出来,按升序进行排列。 二、输入输出 三、示例 示例1: 输入输出示例仅供…

应急响应事件报告模板

文章目录 一. 项目概述1.1 事件概述1.2 应急响应工作目标1.3 应急响应工作结果1.4 相关人员 二. 应急响应工作流程2.1 检测阶段工作说明2.2 抑制阶段工作说明2.3 根除阶段工作说明2.4 恢复阶段工作说明 三. 总结及安全建议3.1 应急响应总结3.2 相关安全建议 一. 项目概述 1.1 …

厦门大学OpenHarmony技术俱乐部开创“1+N”新模式,加速推动产学研融合

12月29日,OpenHarmony技术俱乐部再添重将——在多方见证下,厦门大学OpenHarmony技术俱乐部在翔安校区益海嘉里楼报告厅正式揭牌成立,现场出席领导及师生代表近千人。 成立仪式现场 OpenHarmony技术俱乐部 携手厦门大学共绘开源生态新图景 OpenHarmony是由开放原子开源基金…

网络安全法解读之思维导图

一、出台背景 二、法律基础 三、网络安全法架构 1、第一章 总则(1-14条) 2、第二章 网络安全支持与促进(15-20条) 3、 第三章 网络运行安全(21-39条) (1)第一节 一般规定 &#xf…

ArkTS-拖动手势,下拉刷新

PanGesture(拖动手势) 用于触发拖动手势事件,滑动的最小距离为5vp时拖动手势识别成功。 PanGesture官方解释 示例 import promptAction from ohos.promptActionEntry Component struct Index {StatetranslateY: number 0Statetext: string …

tp8/6 插件PhpOffice\PhpSpreadsheet导入表格

一、安装 composer require phpoffice/phpspreadsheet 官网&#xff1a;phpoffice/phpspreadsheet - Packagist 二、代码 <?php namespace app\services\upload\model; use app\services\BaseServices; use \PhpOffice\PhpSpreadsheet\Spreadsheet; use \PhpOffice\Php…

Axure鲜花速递商城网站原型图,花店网站O2O本地生活电商平台

作品概况 页面数量&#xff1a;共 30 页 兼容软件&#xff1a;仅支持Axure RP 9/10&#xff0c;非程序软件无源代码 应用领域&#xff1a;鲜花网、花店网站、本地生活电商 作品特色 本作品为「鲜花购物商城」网站模板&#xff0c;高保真高交互&#xff0c;属于O2O本地生活电…

python 深度学习 记录遇到的报错问题10

本篇继python 深度学习 解决遇到的报错问题9_module d2l.torch has no attribute train_ch3-CSDN博客 一、CUDA error: no kernel image is available for execution on the device CUDA kernel errors might be asynchronously reported at some other API call,so the stackt…

跟cherno手搓游戏引擎【1】:配置与入口点

环境配置&#xff1a; 编译环境&#xff1a;VS2019 创建两个项目&#xff1a; 设置Sandbox为启动项&#xff1a; 设置sandbox的配置属性-常规-输出目录\中间目录为如下&#xff1a; 预处理定义&#xff1a;为了配置一些只有windows才能用的函数。 设置YOTOEngin&#xff08;我…

LeetCode 每日一题 Day 28293031 ||三则模拟||找循环节(hard)

1185. 一周中的第几天 给你一个日期&#xff0c;请你设计一个算法来判断它是对应一周中的哪一天。 输入为三个整数&#xff1a;day、month 和 year&#xff0c;分别表示日、月、年。 您返回的结果必须是这几个值中的一个 {“Sunday”, “Monday”, “Tuesday”, “Wednesday…

Cam4DOcc: 基于摄像头的4D占据网格预测的自动驾驶应用

文章&#xff1a;Cam4DOcc: Benchmark for Camera-Only 4D Occupancy Forecasting in Autonomous Driving Applications 作者&#xff1a;Junyi Ma, Xieyuanli Chen , Jiawei Huang, Jingyi Xu, Zhen Luo, Jintao Xu, Weihao Gu, Rui Ai, Hesheng Wang 编辑&#xff1a;点云P…

Python高效编程:十招实用技巧大揭秘!

文章目录 1\. 代码优化与高效数据结构2\. 列表推导式和生成器表达式3\. 使用装饰器和上下文管理器4\. 多线程和多进程5\. 函数式编程和Lambda函数6\. 内置模块与标准库7\. 文件处理与I/O操作8\. 调试和性能优化工具9\. 文档化与测试10\. 并发编程与异步技术总结Python技术资源分…

UE4.27.2 网页串流

1、和Unity串流一样安装Node.js 下载地址https://nodejs.org/ 2、下载安装Epic Games启动程序https://www.unrealengine.com/zh-CN/download 3、安装UE4.7.2 4、这里就不安装像素流送演示&#xff0c;选个别的然后创建工程 5、启用PixelStreaming插件 6、设置额外启动参数&am…