hashMap 与 hashTable 的区别

hashMap 与 hashTable 的区别

  1. hashMap 不是synchronized [ˈsɪŋkrənaɪzd] 的,也就是线程不安全。而hashTable是synchronized的,是线程安全的。 如果存在多个线程同时读写同一个hashMap,那么需要手动加锁才能保证线程安全,而hashTable的方法本身就有锁,不需要手动加锁。

    ​ 也正是因为hashTable的方法本身有锁,所以hashTable的读取速度比hashMap要慢。如果是单线程,推荐使用hashMap 。如果是多线程,为了保证线程安全,推荐使用hashTable(在java5以后,hashTable逐渐被舍弃,可以使用ConcurrentHashMap完成与hashTable相同的功能)。

  2. hashMap中 , Key 和 Value 都可以是null , 在hashTable中,Key和value都不能是null。

  3. hashMap 的默认容量是16 , hashTable的默认容量是11 。 两者的填充因子默认都是0.75。hashMap要求底层的数组容量必须是2的整数次幂, hashTable不要求。在数据量达到超过阀值时,二者都会自动扩展,hashMap会自动扩展到原容量的2倍, hashTable会自动扩展到原容量的2倍+1。

  4. 是否包含contains方法。 hashMap把contains方法去掉了, 改成了 containsKey() 和 containsValue()方法。 hashTable有 contains() 、containsKey()、containsValue()方法 , 其中 contains()和containsValue()功能相同。

  5. 哈希值的使用是不同的,HashTable的hash值是直接使用对象中的hashCode方法,而HashMap则是重新计算对象的HashCode;并且用与代替求模。

  6. HashMap继承自AbstractMap类

    在这里插入图片描述

    Hashtable继承自Dictionary [ˈdɪkʃənri] 类

    在这里插入图片描述

    但二者都实现了Map接口。

    1. 三者效率的比较:
      由于安全机制的原因,HashMap的效率比HashTable,CurrentHashMap的效率高;但是由于CurrentHashMap加锁的高效性,HashTable是整个加锁,他的效率比HashTable高; 总的来说 HashMap>CurrentHashMap>HashTable;

参考文章:https://blog.csdn.net/u010476994/article/details/80049715

https://blog.csdn.net/qq_29882585/article/details/52198014

https://blog.nowcoder.net/n/40d21b0208a64bd5881070d4ade47be1

-------------本文结束感谢您的阅读-------------