java学会这些,我就入门啦!(基础篇六)HashMap、Hashtable、ConcurrentHashMap的原理与区别

​HashMap、Hashtable、ConcurrentHashMap的原理与区别

这个是一般是面试必备的题目,这里放在基础讲是因为这个东西确实不难,但是衍生出来能问的东西确实多。话不多说,我们下面就来讲一讲。

我们先进行Hashtable与HashMap的比对:

Hashtable与HashMap,他们之间的最大的区别在与Hashtable是线程安全的,而HashMap不是线程安全的,Hashtable是在java开始发布时就提供的键值映射的数据结构,而HashMap产生于JDK1.2。现在Hashtable基本已经失去了使用常见,究其原因第一可能是因为效率慢,但还有很大一部分原因估计是因为没有遵循驼峰命名。说实话,我这个强迫症看着他就非常难受!其他还有一些不同就是他们的父类也不一样,HashMap是继承自AbstractMap类,而Hashtable继承自Dictionary类,还有就是Hashtable无论是key还是value都不能为null,实现线程安全的时候是锁住整个Hashtable,效率超级低。果然,没人用的东西必然有不可取之处。

我们再来看看ConcurrentHashMap:

hashMap与ConcurrentHashMap,他们之间的区别其实跟hashtable与hashMap的区别差不多,也是ConcurrentHashMap是线程安全的,但是hashtable是使用的是synchronized关键字,而ConcurrentHashMap使用的是分段锁技术,他融合了hashMap与synchronized的优点,ConcurrentHashMap默认将hash表分为16个区间,正常的操作只需要使用到当前的区间,这样看来,原来只能一个线程进入的,现在却能16个线程同时进入,读线程几乎不受任何影响,写入才会锁定,性能的提升简直不可同日而语。

面试官问你hashMap的原理的时候怎么办?

这里我帮你们整理了一段话术,hashMap是一个数组加链表的结构,它本身是一个特殊的数组结构,初始长度为16,加载因子是0.75,也就是每当存储的长度到达当前最大长度的0.75时就会扩容。他是put方法是根据键值对的键hash一下算出他的hash值,根据hash值计算出要添加的键值对放到哪个位置。当格子里面已经存在元素的时候,就把新的键值对放到已经存在格子的链表中。反之,get方法也差不多,先根据键获得hash值,根据hash值知道元素放在哪个格子里面,进入格子中,对格子里的元素的键进行逐个比对,比对完成后,取出对应的值就好了。

关注我!你会更强!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

carl的分享笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值