当前位置: 首页 > news >正文

java中的hashmap和concurrenthashmap解析

hashmap的初始化数组大小为16,如果发生哈希冲突的时候在当前的索引后面采用头插法以链表的形式继续插入节点。
concurrenthashmap的结构图如下所示:
concurrenthashmap结构图
本身不是16个节点吗?这里分为两个长度为4的数组,变成了4*4总共16个节点,每个位置下面如果发生了哈希冲突继续往下接节点。如果对一个Segment进行写操作的时候,就把整个Segment进行锁上,这样既避免了线程冲突,同时又避免了hashtable一个数据处理锁整个数组,其他线程处理实现过长的问题。
每一个哈希表下面还有一个哈希表,锁高度自治。
Get方法:
1.为输入的Key做Hash运算,得到hash值。
2.通过hash值,定位到对应的Segment对象。
3.再次通过hash值,定位到Segment当中数组具体的位置。
Put方法:
1.为输入的Key做Hash运算,得到hash值。
2.通过hash值定位到对应的Segment对象。
3.获取可重入锁。
4.再次通过hash值定位到Segment当中数组具体位置。
5.插入或覆盖hashEntry对象。
6.释放锁。

http://www.lryc.cn/news/111979.html

相关文章:

  • 元素2D转3D 椭圆形旋转实现
  • Centos7.9 制作openssh9.2p2 rpm升级包和升级实战
  • JavaScript学习(3)
  • 2023华为OD机试真题Java实现【寻找最大价值的矿堆/深度优先搜索】
  • MyCat概述
  • 【LeetCode】【数据结构】单链表OJ常见题型(一)
  • QGraphicsView实现简易地图3『局部加载-地图缩放』
  • bash的特性(二)IO重定向与管道
  • elb 直接配置到后端服务器组
  • 安卓:BottomNavigationBar——底部导航栏控件
  • 十、用 ChatGPT 辅助写文章
  • 计算机毕设 深度学习猫狗分类 - python opencv cnn
  • 60多行代码仿制B站首页一个好看的卡片效果
  • Redis内网主从节点搭建
  • ESP32-C2开发板 ESP8684芯片 兼容ESP32-C3开发
  • Zebec 创始人 Sam 对话社区,“Zebec 生态发展”主题 AMA 回顾总结
  • 一台电脑给另外一台电脑共享网络
  • AAA 认证
  • jvm-程序计数器
  • NestJs Debug配置文件
  • 题解 | #C.idol!!# 2023牛客暑期多校6
  • 使用filebeat收集并解析springboot日志
  • P1993 小 K 的农场
  • Spring boot 集成 Skywalking 配置 || Skywalking 打不开【已解决】
  • 手把手教你使用 ftrace 对 Linux 系统进行 debug
  • 【练】要求定义一个全局变量 char buf[] = “1234567“,创建两个线程,不考虑退出条件,打印buf
  • iOS Viper架构(中文版)【看懂这篇就够了】
  • 深入理解缓存 TLB 原理
  • 获取k8s scale资源对象的命令
  • 基于ChatYuan-large-v2 语言模型 Fine-tuning 微调训练 广告生成 任务