HashMap的源码了解

hash:散列 讲一个任意长度通过某种hash函数算出一个固定值
Java 通过移位来实现
通过hash出来的一个指,通过值定为到map,然后value存储在这个map中
源码分析:
初始化容量 1左移4位=16 hash表创建的时候加载的容量
加载因子系数: 1分成4等分 0.25 0.25*3=0.75
在容量的四分之三的时候扩容
EntryTable:
threshold扩容的时候一个入口
Holder:加载jdk找到 thresgold
put方法:
如果table是空的话就初始化,然后赋值一个null存起来
key不为空的时候:
通过四次固定的位置,产生一个比较分散的列表
hash出来的值重复了value?
当e.hash==hash&&(k=e.key)==key||key.equals(k)
先将进来的值e.value赋值给老的oldvalue
然后在将value给e.value
如果key是重复的就返回它,否则返回nullhash
hashmap什么时候扩容:put的时候 达到一个四分之三
if size>threshold并且不为空
扩大为2倍,为什么是偶数? indexof拿到hash值
resize:
先将老的entry大小进行判断,然后创建一个entry数组,然后调用transfer进行赋值
hashmap table:数组加链表
hashmap的不足的地方:
每当hashmap扩容的时候需要重新去add entry对象,需要重新hash,然后放入到我们的entrytable中
平时使用的时候知道hashmap需要多大的值,最好先指定他们的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值