首页 > 其他分享 >HashMap

HashMap

时间:2022-10-22 09:00:11浏览次数:38  
标签:hash HashMap 元素 一棵树 链表 数组

在jdk1.7版本其底层结构是:数组+链表
在jdk1.8版本之后底层结构修改成为:数组+链表+红黑树

在扩容机制上:
jdk1.7:当满足扩容条件后-->其初始默认的容量为16,每次扩容都×2;
其原因是:HashMap在扩容时选择了位运算。当向集合中添加元素时,它将使用(n-1) & hash的计算方法来获得元素在集合中的位置。只有当相应位置的数据都为1时,运算结果也为1。当HashMap的容量是2的n次幂时,(n-1)的2进制也就是1111111111这样形式的。这样,在用添加元素的hash值进行位运算时,可以充分散列,使添加元素均匀分布在HashMap的各个位置,减少hash碰撞。*

jdk1.8:在扩容是也是创建一个新的数组,然后将原来数组中的元素进行复制;但是需要注意的是,若原来数组位置上是一个树;在将树上的元素复制到新的数组中时,会重新计算位置那么可能发生的情况就会存在很多
1.一棵树拆成了两个链表,或者很多的散列元素
2.一棵树 拆成了两棵树
3.一棵树还是一棵树
.......
生成红黑树的条件-->数组长度大于64,链表长度大于8;

标签:hash,HashMap,元素,一棵树,链表,数组
From: https://www.cnblogs.com/xuzhidong/p/16815292.html

相关文章