每日一面——HashMap与HashTable有什么区别

菜鸡每日一面系列打卡8

每天一道面试题目 

助力小伙伴轻松拿offer

坚持就是胜利,我们一起努力!

题目描述

HashMap与Hashtable有什么区别?

题目分析

参加过Java面试的小伙伴可能都知道,HashMap几乎是面试中一定会考察的知识点,与HashMap相关的高频面试题有很多,今天的题目就是其中之一,后续菜鸡会和小伙伴们一起,把HashMap相关的高频面试题逐一解剖。事实上,有句话说的好:“源码面前,了无秘密。”对于Java基础知识相关的面试题,最好的解答就是源代码,它提供了所有的细节和线索,关键部分确实值得仔细研究,HashMap就是关键部分之一,而且是在日常工作中必然会用到的部分。掌握这部分知识就显得尤为重要。

题目解答

HashMap与Hashtable的区别可以从以下几个方面来考虑:

  • 底层数据结构:JDK1.8HashMap底层存储结构做了较大的优化,采用的是数组+链表+红黑树的存储结构,以更好地解决哈希冲突。当链表长度大于阈值(默认为8)时,会将链表转化为红黑树,以减少搜索时间。而Hashtable没有这样的机制。

    

  • 线程是否安全:HashMap是非线程安全的,Hashtable是线程安全的;Hashtable内部的方法基本都经过sychronized关键字修饰,但这并不意味着在需要保证线程安全的情况下就必须使用Hashtable。事实上,Hashtable已经是过去时了,如果需要保证线程安全,推荐使用ConcurrentHashMap,二者有一个很关键的不同就是锁的粒度的不同,具体细节后续会专门有文章进行讨论。这也是一道比较经典的面试题,在此就不展开叙述了。

    

  • 细节上的不同:

    • HashMap支持null作为键,而Hashtable不支持;

    • 在容量大小方面,二者也有差异。

      • 创建对象时不指定容量大小的情况下,HashMap的默认容量大小为16,后续每次扩容,容量大小变为原来的2倍;而Hashtable的默认容量大小为11,后续每次扩容,容量大小变为原来的2n + 1。

      • 创建对象时指定容量大小的情况下,HashMap会将其扩容至2的幂次方大小,也就是说,在任何情况下,HashMap的容量都将是2的幂次方,这是为了在计算元素所在的数组下标时,用位运算取代取模运算,以提高效率;而Hashtable则会直接使用指定的值作为容量的大小。

以上就是HashMap与Hashtable的主要不同点,更进一步可以考虑详尽地说明HashMap底层的结构,以及各个方法的作用,这部分内容也是非常重要的面试点,菜鸡将在后续的文章中与小伙伴们一起学习。

以上是菜鸡在面对这道面试题的时候的一些思路,供大家参考。

学习 | 工作 | 分享

????长按关注“有理想的菜鸡

只有你想不到,没有你学不到

你可能感兴趣的:(面试经验)