HashMap和Hashtable源码解析、对比

本文详细对比了HashMap和Hashtable两个Java集合类,包括它们的安全性、是否允许空值以及性能参数。HashMap非线程安全,适合高并发场景,而Hashtable则保证线程安全但效率较低。两者的初始容量和负载因子对性能有直接影响,建议根据需求预设。此外,解释了HashMap的扩容机制,当容量达到一定阈值时,HashMap会进行扩容,以保持内部结构的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hashtable

1.不允许key或value为空

 

2. 是线程安全的,所有public的方法都加了synchronized关键字

 

3. Hashtable的一个实例有两个参数影响其性能:初始容量(默认11)负载因子(默认0.75)。所以建议:如果已知键值对的个数,最好设置其初始容量

 

 

HashMap

1.实现了Map接口,并且允许空值作为其键或值

2.不是线程安全的,所有public的方法都没有同步关键字

3. HashMap的一个实例有两个参数影响其性能:初始容量(默认16)负载因子(默认0.75)。所以建议:如果已知键值对的个数,最好设置其初始容量(同Hashtable)

 

 

Hashtable和Hashtable的异同

同:

1、底层都是数组+链表实现

异:

1、Hashtable线程安全,HashMap线程不安全。

2、Hashtable不允许null值,HashMap允许null值。

3、Hashtable默认的初始容量是11,HashMap默认的初始容量是16。

4、Hashtable继承Dictionary类,HashMap实现Map接口。

 

 

HashMap的扩容

  初始容量是16,加载因子是0.75。所以当hashmap的容量达到16*0.75=12时,hashmap会扩容;扩容后的长度是16*2=32

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值