首页 > 其他 > 详细

HashMap与Hashtable

时间:2020-09-24 20:50:03      阅读:55      评论:0      收藏:0      [点我收藏+]

HashMap在平时用的较多,了解得也较多,当问起Hashtable时,脑子里一篇空白(没用过)。

下面记录一下这两者的区别:

1.继承关系

技术分享图片 技术分享图片

从图片中可以发现,HashMapj继承了AbstractMap,Hashtable继承了Dictionary,两者继承的父类不同。还可以发现,两者都实现了Map,Cloneable,Serializable这三个接口。

2.Key和Value是否支持null

先看Hashtable

技术分享图片

 

 源码的注释写着key和value都不能为空。

再看HashMap

技术分享图片

 

 从注释可以看出key和value都可以为null;value可以与key值相关联,或者null,如果没有key的映射,可以返回null如果key或者value为null。

3.是否线程安全

HashMap是线程不安全的,Hashtable是线程安全的

技术分享图片

 

 这张图片是Hashtable的put方法,使用了synchronize修饰,Hashtable源码中还有许多方法使用了synchronize修饰来保证线程安全。

4.初始大小与扩容策略

Hashtable的初始大小是11,HashMap的初始大小是16

Hashtable的扩容策略是2n+1(原大小的2倍+1),HashMap的扩容策略是2n(原大小的2倍)。

5.底层数据结构(JDK1.8)

HashMap:

当hash冲突小于8时采用链表法存储,

当hash冲突大于8时采用红黑树存储,

当hash冲突小于6时转化为链表法存储,

原因之一:当hash冲突=8时,链表法的平均查询次数为n/2=4,红黑树的平均查询次数为logn=3,这时将链表存储结构转化为红黑树存储才有意义。

Hashtable:

始终链表方式存储。

HashMap与Hashtable

原文:https://www.cnblogs.com/yu-xia-zheng-ye/p/13725635.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!