最近去面试,面试官问了我一个问题,HashMap与HashTable有什么区别?我当时一脸懵B,没能完整答上来。于是,我整理了此文。
HashMap与HashTable的区别:
- HashMap是线程不安全的,HashTable是线程安全的,它的内部方 法基本都是synchronized
- HashMap的键和值都是允许为null的,而HashTable则不行
- 因为HashMap是线程安全的,所以它比HashTable的效率高
那问题来了,什么是线程安全,什么又是线程不安全呢?
线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问,直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得的数据是脏数据。
HashMap与HashTable的底层实现是什么呢?
HashMap与 HashTable的内部存储结构都采用了相同的存储机制—哈希表(散列表)。二者的实现基本一致。
采用哈希表的好处是:这种数据结构综合了数组和链表的优点,所以具有较快的查询速度,以及相对较快的增删速度,很适合在海量数据的环境中使用。
想要深入了解HashMap与HashTable的内部实现机制,请参考终点大神的深入解析HashMap、HashTable