java hashtable的底层实现_3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?...

img?url=

今天是”Java面试知多少“栏目的第14期哦!

img?url=

51923c8ed88ffc3de55b2442088ab3b0.png

像蝴蝶般飞舞,像蜜蜂般叮咬!By the way!非常感谢大家的关注还有很多建议。(每天写这段话就觉得很舒服)

--------------------------------------------------------------

874be6701df9f71ef4c36082403d78b6.png

咳咳,面试了啊!严肃脸!

254b4c5bd636ba8b318f209326973bdb.png

问题:[Java基础]请介绍HashMap的底层实现原理及与HashTable的区别??

难度:b4530649d139c3989fa0dfb755e36d27.png

img?url=

(面试常客!常客!常客!难度不大)

254b4c5bd636ba8b318f209326973bdb.png

解题思路:

img?url=“名词反问题+区别题”——该题第一问就直接回答,第二问分别介绍两个名词然后对比区别。

答案详解:

HashMap的底层实现原理

HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来储存Entry对象。

JDK7中HashMap采用的是位桶+链表的方式,我们常说的散列链表的方式,而JDK8中采用的是位桶+链表/红黑树(有关红黑树请查看红黑树)的方式,也是非线程安全的。当某个位桶的链表的长度达到某个阀值的时候,这个链表就将转换成红黑树。

HashMap与HashTable的区别

HashMap和Hashtable都实现了Map、Cloneable(可复制)、Serializable(可序列化)这三个接口接口,主要的区别有:线程安全性,同步(synchronization),继承的父类不同,产生时间等。

1、线程安全性不同

Hashtable线程安全:因为它每个方法中都加入了Synchronize,对整个table加锁,HashMap是线程不安全的。

2、同步(synchronization)

HashMap是synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。

3、继承的父类不同

HashMap继承自AbstractMap类,而HashTable继承自Dictionary类。

4、产生时间

HashTable是java一开始发布时就提供的键值映射的数据结构,而HashMap产生于JDK1.2。虽然HashTable比HashMap出现的早一些,但是现在HashTable基本上已经被弃用了。

5、key和value是否可以为空

其中key和value都是对象,并且不能包含重复key,但可以包含重复的value。HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。HashTable中,key和value都不允许出现null值。

6、hash值不同

HashTable直接使用对象的hashCode。而HashMap重新计算hash值。

7、两个遍历方式的内部实现上不同

HashMap使用Iterator,HashTable使用Iterator,还使用了Enumeration的方式(比较早的方式)。

敲重点:

这个部分的面试题以上两点问的最多,但远远不止这两个点,还是慢慢积累,多写代码多读源码。

254b4c5bd636ba8b318f209326973bdb.pngimg?url=

640?wx_fmt=gif

--------------------------------------------------------------

1845b30ad17565091f635e538b56d67f.png

img?url=留言功能可能没有了,很可惜啊!文章有问题或者有什么建议想说的,欢迎私信我交流。(小姐姐说:后面的栏目更精彩哟,千万不要取关啦)

img?url=

1845b30ad17565091f635e538b56d67f.png

img?url=

喜欢的小可爱扫码关注并转发下方的图片,送你一朵小花花

2f532b142e286b353b3365b922f3209f.png

觉得还不错点击下方的好看哟!

↓↓↓

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值