HashMap和Hashtable的区别
创始人
2025-05-29 11:44:55
0

相同点:

  • HashMap和Hashtable都是java.util包下的类
  • HashMap和Hashtable都实现了Map接口,存储方式都是key-value形式
  • HashMap和Hashtable同时也都实现了Serializable和Cloneable接口
  • HashMap和Hashtable的负载因子都是0.75

扩容:首次创建 HashMap,会指定其容量(如果未明确指定,默认是 16),后续不断的向 HashMap 中 put 元素,如果 元素个数(size)超过临界值(threshold) 的时候,就会进行自动扩容(resize),并且,在扩容之后,还需要对 HashMap 中原有元素进行 rehash,即将原来桶中的元素重新分配到新的桶中。

负载因子(loadFactor):
loadFactor 是装载因子(负载因子),表示 HashMap 满的程度,默认值为 0.75f,也就是说默认情况下,当 HashMap 中元素个数达到了容量的 3/4 的时候就会进行自动扩容。

如果负载因子越大,对空间的利用更充分,但是查找效率会降低(链表长度会越来越长);如果负载因子太小,那么表中的数据将过于稀疏(很多空间还没用,就开始扩容了),对空间造成严重浪费。系统默认加载因子为0.75,这是一个比较理想的值,一般情况下我们是无需修改的。

       另外,无论我们指定的容量为多少,构造方法都会将实际容量设为不小于指定容量的2的次方的一个数,且最大值不能超过2的30次方

临界值(threshold) = 负载因子(loadFactor) * 容量(capacity)。

  • HashMap与Hashtable的部分方法相同,如put,remove等方法

不同点:

 1、继承的父类不同

Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。

2、HashMap是非线程安全的,Hashtable是线程安全的

HashMap:当我们进入put方法查看源码时可以发现put方法返回的方法只有个finla修饰,没有任何关于线程的存在

Hashtable:当我们点击进入之后,就能马上看到一个synchronized关键字(这个锁的是类实例的方法),表示同一个实例对象的这个方法在调用的时候不能被其他的线程对象访问。

3. HashMap允许null作为键或值,Hashtable不允许,运行时会报NullPointerException

从上面Hashtable的put方法,value值为null时,会抛出一个异常NullPointerException
给HashMap传入空值时,分别查看它们的size时,HashMap会得到一个1

hashMap会先判断key是不是为null 

4. HashMap添加元素使用的是自定义hash算法,Hashtable使用的是key的hashCode

5. HsahMap在数组+链表的结构中引入了红黑树,Hashtable没有
hash结构它的底层数据结构存储应该是一个数组加列表的形式,所以HashMap和Hashtable它的底层存储机制都是数组加列表的结构,但是在jdk 1.8版本之后HashMap增加了一个新的结构叫做红黑树。

6. HashMap初始容量为16,Hashtable初始容量为1

7. HsahMap扩容是当前容量翻倍,Hashtable是当前容量翻倍+

8. HsahMap只支持Iterator遍历,Hashtable支持Iterator和Enumeration

遍历的机制HashMap有一个叫keyset还有一个叫Entryset的两个方法,得到的结果都是Iterator(迭代器)。

而Hashtable有一个叫elements的方法,他的结果是Enumeration,同时Hashtable也能得到key和Entry,所以Hashtable的遍历方式多了一个机制。

9. HsahMap与Hashtable的部分方法不同,比如Hashtable有contains方法。

Hashtable中有contains方法,HsahMap中就没有。HsahMap只有containsKey和containsValue但是没有contains。
 

相关内容

热门资讯

企业IP打造指南:小公司低成本... 小公司做企业IP,不是为了装门面,而是让客户在没见到你之前,就能通过内容知道你是谁、你解决什么问题、...
官方:赵心童入选世界斯诺克名人... 北京时间5月8日消息,世界斯诺克巡回赛(WST)今日正式公布了2025/26赛季年终奖项及名人堂更新...
小灰熊AI学员王锋:希望能跟上... 35了,老程序员了。 从进入互联网行业到现在,其实已经做了很多年移动端开发。最早那几年,安卓行业发展...
原创 2... 2026年全国两会把稳定房地产市场列为重点工作,政府工作报告明确提出因城施策控增量、去库存、优供给。...
一年翻倍,六年未归——徽商银行... 文:向善财经 今年的港股市场,与A股市场出现了明显的分化。 A股这边,科技板块在AI浪潮中热闹非凡;...
古井贡酒2025:在行业深度调... 以“稳”为底、以“新”为翼。 文/每日财报 杜康 在行业库存高企、价格倒挂的背景下,当多数酒企在为...
好上好8408万收购鼎瑞芯加码... 5月7日晚,好上好(001298.SZ)抛出一份收购公告,拟以8408万元现金收购深圳市鼎瑞芯科技有...
全面大撤离!李嘉诚英国“套现”... 突发,李嘉诚又卖了。 这次,套现了455亿。 金额不少,但更值得关注的是透露着不同寻常的信号。 因为...
油气价格上涨加剧法国一季度贸易... 据新华社,法国海关7日发布的数据显示,受中东局势推高国际油气价格影响,法国今年第一季度贸易逆差扩大至...
昆仑芯启动科创板IPO上市辅导... 5月8日,据证监会官网显示,昆仑芯(北京)科技股份有限公司于2026年5月7日正式启动科创板上市辅导...
贵州茅台酒股份有限公司关于回购... 来源:上海证券报 证券代码:600519 证券简称:贵州茅台 公告编号:临2026-016 贵州茅...
百度昆仑芯启动科创板上市辅导,... 5月8日,证监会官网显示,昆仑芯(北京)科技股份有限公司 (下称“昆仑芯”)于2026年5月7日正式...
滕州信华的承压时刻:罚单、失信... 2026年4月末,滕州信华美元债单日跌近2%,关联方被列“老赖”。半年前,这家AA+城投曾因非市场化...
002808,或被终止上市! 【导读】因触及财务类退市指标,*ST恒久或被终止上市 中国基金报记者 李智 又一A股或被终止上市。 ...
院士团队掌舵,溧阳这家企业已完... 近日,溧阳天目先导电池材料科技有限公司(下称“天目先导”)官宣完成B轮融资,投资方包括知卓创新资本、...
工商银行全新推出“工盈研选”品... 深圳商报·读创客户端记者 詹钰叶 近日,工商银行重磅推出「工盈研选」基金销售服务品牌,以客户盈利为核...
和讯信息胡云龙:逼空走势,周五... 今天市场出现逼空走势,场内投资者因持有筹码而尤为受益。五一前布局的投资者当前收获颇丰。然而,随着上证...
今晚,油价上调! 4月21日国内成品油价格下调以来,国际市场原油价格剧烈震荡,前期大幅上涨后近日有所回落,本次调价的前...
南方东英旗下两倍做多海力士,成... 【导读】南方东英旗下两倍做多海力士,成为全球最大的个股杠杆及反向产品 中国基金报记者 伊万 人工智能...
原创 金... 黄金,这东西从古至今就没离开过中国人的生活。从老辈人压箱底的小黄鱼,到如今年轻人结婚绕不开的“三金”...