HashMap与HashTable

1.Hashtable产生时间相对于HashMap较早,后逐渐废弃

Hashtable:@since JDK1.0

HashMap:@since 1.2

2.Hashtable既不支持Null key也不支持Null value

 

HashMap对象的key、value值均可为null

3.Hashtable是线程安全(因为每个方法中都加入了Synchronize关键字)

HashMap不是线程安全的(可能会产生死锁)

4.HashMap执行效率比Hashtable高

5.初始容量大小和每次扩充容量大小的不同

Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。

     

HashMap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍

6.计算效率

HashMap则更加关注hash的计算效率问题。在取模计算时,如果模数是2的幂,那么我们可以直接使用位运算来得到结果,

Hashtable的侧重点是哈希的结果更加均匀,使得哈希冲突减少。当哈希表的大小为素数时,简单的取模哈希的结果会更加均匀

7.计算hash值的方法不同

计算Hash的过程为了得到元素的位置,首先需要根据元素的 KEY计算出一个hash值,

然后再用这个hash值来计算得到最终的位置

1)Hashtable直接使用对象的hashCode

     (hashCode是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值)

     然后再使用除留余数发来获得最终的位置。 (除法计算比较耗时)
2)HashMap为了提高计算效率,将哈希表的大小固定为了2的幂,这样在取模预算时,不需要做除法,只需要做位运算。位运算      比除法的效率要高很多

 HashMap效率提高,同时计算得出的Hash值低位相似度太大(散列不均匀),造成了Hash冲突

为了解决这个问题,并且不至于把使用2 的幂次方带来的效率提升抵消掉,进行简单的算法将低位相似度较大的数据进行打散

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值