HashTable, HashMap, ConcurrentHashMap 之间的区别

这篇具有很好参考价值的文章主要介绍了HashTable, HashMap, ConcurrentHashMap 之间的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言 

哈希表的组织形式是这样的:

HashTable, HashMap, ConcurrentHashMap 之间的区别,java,java,开发语言

对于哈希表这种重要而又频繁被使用的数据结构,是否线程安全往往是人们经常考虑的方向之一。

一、HashTable

HashTable是线程安全的。但是它的线程安全在于它的关键方法都使用了synchronized,比如get方法、put方法,这就会导致它的并发程度低下。它就是相当于给整个哈希表使用一把锁

HashTable, HashMap, ConcurrentHashMap 之间的区别,java,java,开发语言

 

二、HashMap

HashMap是线程不安全的哈希表,当我们不需要考虑线程安全问题时,HashMap无疑是最优选择。

三、ConcurrentHashMap 

ConcurrentHashMap 是线程安全的hash表。给每个哈希桶安排了一把锁:

HashTable, HashMap, ConcurrentHashMap 之间的区别,java,java,开发语言

 

ConcurrentHashMap的改进

  1. (主要)减少了锁的颗粒度,每个链表都有一把锁,大部分情况下都不会涉及锁冲突;
  2. 广泛使用CAS操作,避免了锁冲突;
  3. 写操作进行了加锁(哈希桶级别),读操作没加锁;
  4. 渐进式扩容。当需要扩容时会创建出一个更大的数组,慢慢的把数据往新数组上增加。

渐进式扩容:

  • 新增元素,往新数组增加;
  • 删除元素,新数组和旧数组都进行寻找然后删除即可;
  • 修改元素,新数组和旧数组都进行寻找,然后把该元素写到新数组上;
  • 查找元素,新数组和旧数组都进行寻找。

在Java8之前,ConcurrentHashMap 进行了锁分段技术:

HashTable, HashMap, ConcurrentHashMap 之间的区别,java,java,开发语言

目的是为了降低锁竞争的概念(Java8之前的概念)。 文章来源地址https://www.toymoban.com/news/detail-675267.html

到了这里,关于HashTable, HashMap, ConcurrentHashMap 之间的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HashMap和HashTable的区别是什么?

    HashMap和HashTable都是常见的哈希表实现,用于存储键值对。它们在功能上类似,但在以下几个方面存在区别: 线程安全性:HashTable是线程安全的,它的所有操作都是同步的,即多线程同时访问HashTable时会自动进行同步处理,从而保证线程安全。而HashMap是非线程安全的,它的操

    2024年02月15日
    浏览(37)
  • 【多线程进阶】信号量,线程安全集合类,Hashtable与ConcurrentHashMap的区别,多线程常见的面试题

    前言: 大家好,我是 良辰丫 ,今天学习多线程最后一节内容,我们主要去了解信号量,线程安全集合类,Hashtable与ConcurrentHashMap的区别,多线程常见的面试题,我们需要重点去掌握,💞💞💞 🧑个人主页:良辰针不戳 📖所属专栏:javaEE初阶 🍎励志语句:生活也许会让我们遍体鳞伤,

    2023年04月27日
    浏览(51)
  • C#中的HashTable和Dictionary之间的区别

    HashTable和Dictionary都是用于存储数据的数据结构的类型。这两个数据结构都将存储的数据保存为键值对。

    2024年02月17日
    浏览(50)
  • 面试题:HashMap线程不安全 ConcurrentHashMap为什么线程安全

    面试的时候先会喊你说说集合,那些集合线程不安全?当你说了 HashMap 线程不安全,面试官可能会进一步询问你是否了解 ConcurrentHashMap ,以及它是如何实现线程安全的。 ArrayList、LinkedList、TreeSet、HashSet、 HashMap 、TreeMap等都是线程不安全的。 HashTable 是线程安全的。 来看个例

    2024年04月23日
    浏览(42)
  • 美团面试拷打:ConcurrentHashMap 为何不能插入 null?HashMap 为何可以?

    周末的时候,有一位小伙伴提了一些关于 ConcurrentHashMap 的问题,都是他最近面试遇到的。原提问如下(星球原贴地址:https://t.zsxq.com/11jcuezQs ): 整个提问看着非常复杂,其实归纳来说就是两个问题: ConcurrentHashMap 为什么 key 和 value 不能为 null? ConcurrentHashMap 能保证复合操

    2024年02月11日
    浏览(35)
  • Java----Hashmap,LinkedMap和TreeMap三者的区别

            其中map表示的意思为“映射”,HashMap,LinkedMap和TreeMap这三中类都是对Map接口的实现类,在数据插入方面,HashMap是无序插入,LinkedMap是有序插入,而TreeMap会根据键的值进行排序后再进行插入。在运行方面,前两个的运行速度较快,针对Map对象的存储会选择前两者,

    2024年02月13日
    浏览(43)
  • 【Java】后端开发语言Java和C#,两者对比注解和属性的区别以及作用

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《Java》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年01月16日
    浏览(51)
  • ConcurrentHashMap 1.7与1.8的区别

    ConcurrentHashMap 与HashMap和Hashtable 最大的不同在于:put和 get 两次Hash到达指定的HashEntry,第一次hash到达Segment,第二次到达Segment里面的Entry,然后在遍历entry链表 从1.7到1.8版本,由于HashEntry从链表 变成了红黑树所以 concurrentHashMap的时间复杂度从O(n)到O(log(n)) HashEntry最小的容量为2 S

    2023年04月16日
    浏览(37)
  • 大型语言模型(LLM, Large Language Models)基模和 Chat 模型之间的区别

    最近看大模型相关的知识,有看到大模型都有基础模型(base)和对话模型(chat),不太清楚什么时候用到基础模型,什么时候用到对话模型,故有此文。 通过了解,最简单的概述就是基于基础模型会训练出一个对话(Chat)模型,对话模型主要用于对话场景,基础模型主要做

    2024年02月21日
    浏览(38)
  • java中操作字符串都有哪些类?它们之间有什么区别?

    Java中常用的字符串操作类有: String类是Java中最常用的字符串类,它是不可变的字符串,即创建后不能被修改。 StringBuilder类也是一个字符串操作类,但它是可变的,即可以修改已经创建的字符串对象。StringBuilder比String更适合在程序中进行字符串拼接操作。 StringBuffer类与St

    2023年04月21日
    浏览(82)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包