其他分享
首页 > 其他分享> > HashMap的一些底层知识点

HashMap的一些底层知识点

作者:互联网

数字+链表+红黑树

初始化大小是16,当你调用它的空构造器时

1.7中:首先会创建一个新的entry数组,大小为原来的两倍,然后将重新对旧数组的每个元素的位置,进行添加,遇到哈希碰撞将使用头插法。1.8中:将不在对每个元素重新计算hash的值只需要看看原来的hash值新增的那个bit是1还是0就好了,是0的话索引没变,是1的话索引变成“原索引+oldCap”。同时它也变成了尾插法

负载因子0.75。

threshold就是在此Load factor和length(数组长度)对应下允许的最大元素数目,超过这个数目就重新resize(扩容),扩容后的HashMap容量是之前容量的两倍。默认的负载因子0.75是对空间和时间效率的一个平衡选择,建议大家不要修改,除非在时间和空间比较特殊的情况下,如果内存空间很多而又对时间效率要求很高,可以降低负载因子Load factor的值;相反,如果内存空间紧张而对时间效率要求不高,可以增加负载因子loadFactor的值,这个值可以大于1。

transient Node<K,V>[] table; //存储键值对的数列
transient int size //键值对的数量
int threshold; //数组扩容的临界值
final float loadFactor; //负载因子

可以看看美团技术团队的这篇文章https://zhuanlan.zhihu.com/p/21673805

标签:知识点,负载,HashMap,链表,键值,数组,table,底层
来源: https://www.cnblogs.com/xiaoovo/p/16585456.html