java8 hashtable与hashmap的差异

本文对比分析了HashTable与HashMap的数据结构及实现原理,详细解释了两者在hash算法上的差异,包括hashcode计算、高位运算等步骤,并介绍了它们的初始容量设定及对性能的影响。

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

运行环境jdk8.0

hashmap采用hash table数据结构,所有的方法均被sychronized修饰,初始容量为11的质数,0.75负载因子(在时间和空间的一个平衡方案)保证了hash算法的高效,效率差的hash算法导致Entry元素分布不均,导致分布不均,其导致的结果是新增元素需要遍历链表,这时增加了时间复杂度,删除和查询也都是同样的流程。

在hashtable中的hash算法

第一步为求key的hashcode值,

第二步hashcode & 0x7FFFFFFF位与运算,

第三步在与hashtable的总容量取模运算 % table.length;

这与hashmap中也有些差异,hashmap

第一步:相同调用object的hashcode方法;

第二步:高位运算 h>>>16 h为前一步的hashcode值

第三步:在通过hashcode 与 高位运算的结果算出hash表中所在的槽或者桶的位置

hashmap的初始容量为16,如果指定容量则会根据高位运算求出容量并在最后加1,理解为2的n次方 2,4,8,16,32依次类推

hashtable不允许value为空值

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值