一线大厂面试真题——HashMap与HashTable区别

58 阅读2分钟

考察目的

这个问题一般考察1~3年开发经验。

考察目的仍然是看求职者对Java基础的掌握程度。

集合是Java基础中非常重要的组件,除了根据不同数据结构选择合适的集合类。还需要从安全性、性能、功能特性角度去了解集合的差异性以及底层工作原理。如果达不到这个层次,在使用的时候遇到问题影响就比较大。

因此这也是人才筛选比较基础的一部分。

问题分析

Hashtable和HashMap都是一个基于hash表实现的K-V结构的集合。

Hashtable是JDK1.0引入的一个线程安全的集合类,因为所有数据访问的方法都加了一个Synchronized同步锁。

Hashtable内部采用数组加链表来实现,链表用来解决hash冲突的问题。

HashMap是JDK1.2引入的一个线程不安全的集合类,HashMap内部也是采用了数组加链表实现,在JDK1.8版本里面做了优化,引入了红黑树。

当链表长度大于等于8并且数组长度大于64的时候,就会把链表转化为红黑树,提升数据查找性能。

问题解答

    从功能特性的角度来说

        1、HashTable 是线程安全的,而HashMap不是。

       2、HashMap的性能要比HashTable更好,因为,HashTable采用了全局同步锁来保证安全性,对性能影响较大

    从内部实现的角度来说

        1、HashTable使用数组加链表、HashMap采用了数组+链表+红黑树

        2、HashMap初始容量是16、HashTable初始容量是11。

       3、HashMap可以使用null作为key,HashMap会把null转化为0进行存储,而Hashtable不允许。

最后,他们两个的key的散列算法不同,HashTable直接是使用key的hashcode对数组长度做取模。

而HashMap对key的hashcode做了二次散列,从而避免key的分布不均匀问题影响到查询性能。

总结

对于这类问题,要能够获得面试官的认可,必须要做两个动作

  1.   平时要注意总结

  2.   回答的逻辑结构要清晰,临阵磨枪很难达到这种状态。