首页 > 其他分享 >Hashmap 和 hashtable ConcurrentHashMap 区别

Hashmap 和 hashtable ConcurrentHashMap 区别

时间:2024-08-20 15:53:33浏览次数:9  
标签:ConcurrentHashMap HashMap synchronized hashtable 安全 线程 HashTable Hashmap

HashMap和HashTable的区别:

  1. HashMap是非线程安全的,HashTable是线程安全的。
  2. HashMap的键和值都允许有null值存在,而HashTable则不行。
  3. HashMap线程不安全,HashTable线程安全,但是因为线程安全的原因,HashMap效率更高。
  4. HashTable是同步的,HashMap不是。因此,HashMap更适合于单线程环境,而HashTable适合于多线程环境,一般现在是不建议使用HashTable,
    1. ①是因为HashTable是遗留类,内部实现很多没有优化,并且冗余。
    2. ②即使在多线程环境下,现在也有同步的ConcurrentHashMap替代。

HashTable和ConcurrentHashMap区别:

HashTable使用的是Synchronized关键字修饰,ConcurrentHashMap是JDK1.7使用了锁分段技术来保证线程安全的。JDK1.8ConcurrentHashMap取消了Segment分段锁,采用CAS和synchronized来保证并发安全。

ConcurrentHashMap底层是数组+链表/红黑树

HashTable底层是数组加链表

ConcurrentHashMap中的synchronized只锁定当前链表或红黑树的首节点,只要hash不冲突,就不会产生并发,效率有提示N倍

为什么ConcurrentHashMap优于HashTable?

  1. ConcurrentHashMap 在JDK1.8以后采用的是CAS 乐观锁和synchronized悲观锁,而HashTable采用的是Synchronize悲观锁。其中ConcurrentHashMap的synchronized
  2. 乐观锁的范围小于悲观锁,尤其是读多写少的场景下,并发性能优于悲观锁。

标签:ConcurrentHashMap,HashMap,synchronized,hashtable,安全,线程,HashTable,Hashmap
From: https://blog.csdn.net/m0_65982521/article/details/141361053

相关文章

  • 利用HashMap制作简单的在线教学系统
    制作一个在线教学系统,通过控制台录入,学生信息要保存到HashMap,有如下功能:1、增加学生信息2、删除学生信息3、修改学生信息4、根据学号查看学生信息5、查看成绩排行榜6、退出系统功能首先创建一个Student类packagehashmap;publicclassStudent{privateStrin......
  • ConcurrentHashMap源码阅读
    finalVputVal(Kkey,Vvalue,booleanonlyIfAbsent){if(key==null||value==null)thrownewNullPointerException();inthash=spread(key.hashCode());intbinCount=0;for(Node<K,V>[]tab=table;;){Node<K,V>......
  • HashMap和Hashtable的区别 day15
    /*Map:存储元素的特点是每一个元素是一个键值对{【name:"魏一民"】,【age:18】}Map集合的共同拥有的特点:1、Map集合中的元素,键是唯一的,不会在一个Map集合发现两个相同的键1001:魏一民1002:陈真1001:小虎2......
  • HashMap源码全解析
    1.源码全集如下查看代码 publicclassHashMap<K,V>extendsAbstractMap<K,V>implementsMap<K,V>,Cloneable,Serializable{@java.io.SerialprivatestaticfinallongserialVersionUID=362498820763181265L;staticfinalinthash(O......
  • HashMap 中处理哈希冲突,红黑树对于没有实现 Comparable 接口的 Key 处理
    背景:假设有两个对象,分别是stu和teach(都没有实现Comparable接口),将它们添加进去HashMap里,假设这两个对象发生哈希冲突,那么红黑树怎么判断它们谁在左谁在右?依据是什么?​ 当两个对象stu和teach的哈希值相同,且它们没有实现Comparable接口时,Java8的HashMap会使用t......
  • ConcurrentHashMap的原理
    背景我们知道hashmap是一个线程不安全的数据结构,在多线程编程的时候,多个线程同时向hashmap中put元素的时候,会发生数据丢失。多线程put操作后,再get操作导致死循环。多线程put非NULL元素后,get操作得到NULL值。使用为了保证并发安全,我们使用hashmap的时候,建议是使用ConcurrentHas......
  • 如何解决hashmap不按序问题
    HashMap 在Java中本质上是不保证任何顺序的,特别是它不保证元素会按照插入的顺序进行存储或遍历。如果需要维护元素的插入顺序,可以使用 LinkedHashMap,它在内部通过维护一个双向链表来保持插入顺序。如果想要按照键的自然顺序或者自定义的比较器顺序来存储和遍历键值对,可以使......
  • Java集合:Collection and Map;ArrayList;LinkList;HashSet;TreeSet;HashMap;TreeMap;Iterator:
        集合介绍:                        是一组变量类型(容器),跟数组很像。一,引用集合的原因(必要性):                  A:数组的空间长度固定,一旦确定不可以更改。多了浪费,少了报错。          B:使用数......
  • Hashtable工具类 - C#小函数类推荐
          此文记录的是一个Hashtable的增强版本,以前没泛型的时候笔者喜欢用Hashtable,性能刚刚的。/***Hashtable工具类AustinLiu刘恒辉ProjectManagerandSoftwareDesignerE-Mail:[email protected]:http://lzhdim.cnblogs.comD......
  • Java HashMap 源码解读笔记(二)--xunznux
    文章目录HashMapputVal插入新值方法方法解读1.7和1.8有哪些区别resize重新哈希方法treeifyBin树化方法treeify树化方法untreeify链化方法HashMap本文主要是用于记录我在阅读Java1.8的HashMap源码所做的笔记。对于源码中的注释会进行翻译下来,并且会对其中部......