集合相关专栏

问题系列:
       一、 hashMap、ConcurrentHashMap、hashTable区别?

        1、先说HashMap和HashTable区别

                主要区别HashMap线程是不安全的,HashTable线程是安全的

                1、继承不同,HashMap继承于AbstractMap,HashTable继承于Dictionary

                2、它们存储的键值对区别:HashMap的键可以有一个为null,而值可以多个为null

                                                                HashTable中 键值对皆不可为空

                3、它们的扩容方式是不一样的,HashMap默认的初始化大小是16,装载因子是0.75,并且扩容为2的指数;而HashTabe默认初始大小为11,扩容为2*old+1;

                4、hash值的使用不同,hashtable直接取余,hashMap通过对hash值右移16位做异或操作,并和数组长度-1的方式获取index。

                5、HashTable为整个上锁

        2、ConcurrentHashMap和HashMap区别:

                1、ConcurrentHashMap线程为安全的,加锁机制为分段加锁,锁住的是数组中的元素。情况如下:

                (1)如果未出现hash冲突,也就是此index上无元素存在,就会进行CAS的方式添加元素

               (2)出现hash冲突的情况下,使用synchronized关键字对元素加锁

                        key相同,直接用新元素覆盖旧元素

                        元素未链表性质,直接将新元素挂在链表尾部,此情况时候

                        如果数组的元素是红黑树,将新的元素加入到红黑树

        综上所述,ConcurrentHashMap性能比HashMap性能更好。

                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值