菜鸡每日一面系列打卡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底层的结构,以及各个方法的作用,这部分内容也是非常重要的面试点,菜鸡将在后续的文章中与小伙伴们一起学习。
以上是菜鸡在面对这道面试题的时候的一些思路,供大家参考。
学习 | 工作 | 分享
????长按关注“有理想的菜鸡”
只有你想不到,没有你学不到