3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?

Posted 程序媛小姐姐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?相关的知识,希望对你有一定的参考价值。

3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?

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

3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?

3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?


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

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


 3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?

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


3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?


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

难度:3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?

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


3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?


解题思路

3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?“名词反问题+区别题”——该题第一问就直接回答,第二问分别介绍两个名词然后对比区别。

答案详解: 

  • 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的方式(比较早的方式)。

敲重点:

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



3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?

3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?


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


3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?留言功能可能没有了,很可惜啊!文章有问题或者有什么建议想说的,欢迎私信我交流。(小姐姐说:后面的栏目更精彩哟,千万不要取关啦)3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?


喜欢的小可爱扫码关注并转发下方的图片,送你一朵小花花3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?


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


以上是关于3.15 Java面试知多少 | HashMap的底层实现原理及与HashTable的区别?的主要内容,如果未能解决你的问题,请参考以下文章

hashmap:面试必问知识点,你了解多少?

算法面试套路知多少

阿里java面试题,你能答对多少?

哈希情史知多少

面试中常被问到封装继承多态知多少

面试中的网红Vue源码解析之虚拟DOM,你知多少呢?深入解读diff算法