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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值