HashTable, HashMap, ConcurrentHashMap 三者区别

目录

1. HashMap

2. HashTable 

3. ConcurrentHashMap 

1. HashMap

    HashMap 是 Java 中非常常用的一个数据结构,它主要用于存储 键值对(K,V)。

    在JDK 1.7中,HashMap的实现是基于 Table数组 和 Entry链表 的组合。

      

    从JDK 1.8开始,为了解决链表过长导致的性能问题,当链表长度超过一定阈值时,链表会转换为红黑树。

    特点:

  (1)HashMap 允许使用 null 作为 键(K)或值(V),但是最多只能有一个键为null

  (2)在单线程下,HashMap 是不需要关心线程安全问题的; 但是在多线程下,HashMap就不是线程安全的,因为 它没有任何加锁的操作来 保证线程安全 。

    所以,HashMap 只能在单线程线程安全下执行,但如果我们想在多线程下进行呢?

    此时我们就需要了解一下 HashTable 。

2. HashTable 

     HashTable不允许键为null,但允许值为null。

     HashTable 为保证多线程情况下 是线程安全的,就给整个链表 加入 一把大锁(如下图)。

    如果加一把大锁,那多个线程 现在同时操作 这个 HashTable 的时候,当某个线程在操作的时候,其他线程就只能干等着, 这大大影响了整体的效率

    那有没有 更好的加锁方式来解决这个问题的呢?

    接下来来看 ConcurrentHashMap 。

3. ConcurrentHashMap 

    ConcurrentHashMap 是基于 HashTable 的基础上 将一把大锁 分解到 对数组中每个链表 进行加锁,这样,当我们同时操作 HashMap 中的不同链表中的数据时候,就可以在不影响 线程安全的情况下,将效率进一步 提高了。

   

    ConcurrentHashMap 特点

    (1) ConcurrentHashMap 最核心的改进就是,将一个全局的大锁,改进成 每个链表独立的小锁,这样就大大降低了 锁冲突 的概率

    (2)  ConcurrentHashMap 它还 充分利用到了 CAS 的特性, 将 一些不必要的加锁环节给省略加锁了。

    例如, 需要用变量记录 hash 中的元素个数。

    (3) ConcurrentHashMap 还有一个激进的操作,对读操作没有加锁

    读和读,读和写之间,都不会有锁竞争,

    那有没有可能出现 “ 读到一个修改了一半的值呢”:

    答案是不会,这是因为 ConcurrentHashMap 在底层编码中,谨慎的处理了一些细节,修改的时候,会避免使用一些 非原子的操作,所以 读的时候,要么 读的是修改之前的值,要么是读的修改之后 的值。

    (4) ConcurrentHashMap 针对扩容操作,做了单独的优化

    HashTable 以及 HashMap 在进行扩容的时候,都是将 所有元素进行拷贝一份,这样一来,就会在扩容的 时候 出现卡顿。

    而 ConcurrentHashMap 不会,它在扩容 过程中,并不是一次将所有的元素进行拷贝,而是分成多份进行 分批 搬运,每次只搬运 部分 数据,这样就避免了卡顿。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

直播卖券有妙招:实景ai无人直播系统帮助商家自动化团购直播!

在数字化浪潮席卷的今天,直播卖券已成为商家推广和营销的重要手段。然而,如何高效、精准地利用直播卖券,让每一位观众都能沉浸在购物的乐趣中,成为商家们迫切需要解决的问题。幸运的是,实景AI无人直播系统应运而生&…

503 SERVICE_UNAVAILABLE “Unable to find instance for ***“的问题。

503 SERVICE_UNAVAILABLE "Unable to find instance for *****"问题 1. 问题描述 在完成网关微服务的配置后,网关能够被Nacos发现并正常运行,但是无法将请求转发到其他微服务。使用Postman进行请求时,返回503错误,而后…

Python程序设计 文件处理(二)

实验十二 文件处理 第1关:读取宋词文件,根据词人建立多个文件 读取wjcl/src/step1/宋词.txt文件, 注意:宋词文件的标题行的词牌和作者之间是全角空格(" ")可复制该空格 在wjcl/src/step3/cr文件夹下根据每…

畅捷通TPlus keyEdit.aspx、KeyInfoList.aspx SQL注入漏洞复现

前言 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 一、产…

C++ 结构体内存对齐

定义了两个结构体 typedef struct Cmd {uint8_t ua;uint8_t ub;uint8_t uc;uint32_t ue; } Cmd_t;typedef struct Cmd_tag {uint8_t value;uint8_t data[1]; // 将 data 定义为指向 Cmd_t 结构体的指针 } tag_t;在实际使用中,看见前人的代码是,new 一块内…

KCNScrew Pack for mac v1.8(2024.05.15)激活版 序列号查询软件

KCNScrew Pack是一款Mac序列号查询软件,内置强大的序列号数据库。软件包含数千款软件序列号,基本上大多数常用软件你都可以找到相应的序列号。 KCNScrew Pack for mac v1.8(2024.05.15)激活版 序列号查询软件 主界面 打开KCNScrew可以看到如下的主界面&…

微信自主创建表单投票小程序源码系统 带充值刷礼物功能 附带源代码以及完整的安装部署教程

系统概述 本小程序实现的核心功能包括:用户注册登录、表单提交投票、查看投票结果、在线充值以及赠送礼物等。其中,投票表单可以根据实际需求进行自定义设置,满足不同类型的调查或评选活动。同时,通过引入第三方支付接口&#xf…

STM32_IIC通信

IIC通信 • I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线 • 两根通信线:SCL(串行时钟线)、SDA(串行数据线) • 同步,半双工 • 带数据应答 • 支持总线挂载多…

C 深入指针(4)

目录 一、字符指针变量 1 初始化 2 与字符串数组的区别 二、数组指针变量 1 初始化 2 二维数组传参本质 三、函数指针变量 1 初始化 2 用法 四、typedef关键字 五、函数指针数组 一、字符指针变量 1 初始化 //VS2022 x64 #include <stdio.h> int main() {…

STM32程序下载电路设计

一、背景介绍 使用STM32F103RCT6作为单片机主控芯片&#xff0c;在进行电路板设计过程中&#xff0c;需要预留程序下载接口&#xff0c;可以选择使用JLINK下载器下载程序。 二、设计过程 1、查看STM32F103RCT6的芯片手册&#xff0c;找到下载程序的引脚端口PA13和PA14&#x…

浏览器插件Video Speed Controller(视频倍速播放),与网页自身快捷键冲突/重复/叠加的解决办法

浏览器插件Video Speed Controller&#xff08;视频倍速播放&#xff09;&#xff0c;与网站自身快捷键冲突/重复/叠加的解决办法 插件介绍问题曾今尝试的办法今日发现插件列表中打开Video Speed Controller的设置设置页面翻到下面&#xff0c;打开实验性功能。将需要屏蔽的原网…

抖音小店有订单后怎么发货?实操分享!发货全流程来了

哈喽~我是电商月月 做无货源抖音小店的店铺在出单后怎么发货&#xff1f;今天我就来给大家解答这个问题&#xff0c;其中的注意事项新手商家可以收藏一下&#xff0c;避免犯错 抖音小店的商品出单后&#xff0c;商家在“管理中心-订单管理”页面就能看见所有待处理的订单 一…

IDEA中开发并部署运行WEB项目

IDEA中开发并部署运行WEB项目 1 WEB项目的标准结构2 WEB项目部署的方式3 IDEA中开发并部署运行WEB项目3.1 部署步骤3.2 IDEA关联本地Tomcat 4 IDEA创建web工程5 IDEA部署-运行web项目6 IDEA部署并运行项目的原理 1 WEB项目的标准结构 一个标准的可以用于发布的WEB项目标准结构如…

如何快速实现Java发送邮件功能?

如何使用JAVA发送邮件&#xff1f;&#xff08;不做过多文字解释&#xff0c;详细说明请看代码注释&#xff09; 一&#xff0c;引用相关pom二&#xff0c;实现代码&#xff08;代码参考图片内容&#xff09;三&#xff0c; 接收邮件 一&#xff0c;引用相关pom <dependency…

24长三角C题9页完整建模思路+可执行代码

比赛题目的完整版思路可执行代码数据参考论文都会在第一时间更新上传的&#xff0c;大家可以参考我往期的资料&#xff0c;所有的资料数据以及到最后更新的参考论文都是一次付费后续免费的。注意&#xff1a;&#xff08;建议先下单占坑&#xff0c;因为随着后续我们更新资料数…

信息安全相关内容

信息安全 安全防护体系 安全保护等级 安全防护策略 安全技术基础 安全防护体系 安全防护体系有7个等级 安全保护等级 安全保护等级有5个等级,从上到下是越来越安全的用户自主其实就是用户自己本身具有的相应的能力 安全防护策略 安全策略是对抗攻击的主要策略安全日志: …

Java Chassis 3:接口维度负载均衡

本文分享自华为云社区《Java Chassis 3技术解密&#xff1a;接口维度负载均衡》&#xff0c;作者&#xff1a; liubao68。 Java Chassis 3技术解密&#xff1a;接口维度负载均衡 在Java Chassis 3技术解密&#xff1a;负载均衡选择器中解密了Java Chassis 3负载均衡在解决性能…

社交媒体数据恢复:事秘达

社交软件-事秘达的数据恢复教程如下&#xff1a; 首先&#xff0c;你需要停止使用事秘达应用&#xff0c;以避免覆盖已经删除的数据。 接着&#xff0c;你需要连接你的手机到电脑上&#xff0c;并打开手机的USB调试功能。这可以让电脑读取你手机的数据。 下载并安装一个数据恢…

重生奇迹MU快速获取经验解析

重生奇迹MU觉醒卡级怎么办快速获取经验攻略&#xff0c;在游戏中卡级是玩家会遇到的情况之一&#xff0c;面对打不过的敌人和过不去的主线&#xff0c;想办法升级才是最主要的&#xff0c;游戏中有很多获取经验的途径。下面让我们一起来了解一下卡级后获取经验的攻略&#xff0…

PatterNodes 3 mac矢量图设计 ,色彩与图案的完美融合!

PatterNodes 3 for Mac是一款功能强大的矢量图形模式创建软件&#xff0c;专为Mac用户设计。它采用基于节点的界面&#xff0c;支持创建形状、线条、曲线或文本&#xff0c;以构建复杂的矢量图形模式。该软件还具备灵活的参数调整功能&#xff0c;允许用户实时预览结果并进行无…