深入理解HashMap

在上一篇初步学习了Hash算法后,我又马不停蹄地想看看HashMap到底是怎么实现的!

1.HashMap的数据结构

 在java中,最基本的结构就两种,一个是数组,一个是模拟的指针,即引用;HashMap就是由这两者共同创造出来的,具体可以看下图:

 

我们可以知道HashMap初始化的时候就会创建一个数组,这些数组存的全是根据Key的哈希算法后的值,根据这些值找到对应位置,然后再根据key的equals函数,就可以

取出value了。这种结构在数据结构中成为链式散列。(小知识,其实ArrayList也就是对Object[ ] 进行了封装)。

 

2. java中hashMap的哈希算法

    我们首先想到的就是取mod算法,这样分配比较平均,但是这个算法效率不算高。java中是这样做的,把数组的长度值-1,然后和key的hashcode值做一次位与运算。

    注意,我们在初始化hashMap的时候,最好指定初始大小为2的n次方,这样哈希算法的效率是最高的,具体不详细叙述。当然,如果你不指定,java中也是默认会指定为16个大小的。

    如果你new HashMap(1000),那么java自动会初始化为1024大小。另外如果你存的值越来越多,比如存到了16*0.75=12个时候,hashmap数组的容量就会扩展到32,这就是hashmap的resize机制。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值