本文主要是介绍Java重修笔记 第四十四天 HashSet 添加元素规则、树化规则和扩容规则,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
-
添加元素规则
1. HashSet 底层是 HashMap,所以他俩的逻辑是一样的
2. 添加一个元素时,先得到 hash 值再转成索引值(Hash值来自于却不等于HashCode()的值)
3. 看这个存储数据表 table 的索引位置是否已经存放有元素
4. 如果没有,直接加入
5. 如果有,则调用对象的 equals() 方法逐一进行比较,如果有相同的,就放弃添加,如果都不相同,则添加到最后,如果这条链表的元素个数超过 TREEIFY_THRESHOLD(默认是 8),则会尝试树化
-
树化规则
1. 在Java8中,树化规则是,如果其中一条链表的元素个数超过 TREEIFY_THRESHOLD(默认是 8),并且 table 的大小 >= MIN TREEIFY_CAPACITY(默认64),满足这两点后就会进行树化(转成红黑树)
2. 如果只是满足链表的元素个数超过8,但 table 的大小没有 >= 64,则会触发扩容机制
-
扩容规则
1. 第一次添加时,table 数组扩容到16
2. 临界值 threshold 是加载因子 loadFactor 0.75 乘以数组长度,也就是说,当数组使用到临界值时,会进行扩容
3. 每次扩容都会是原来数组长度的两倍
这篇关于Java重修笔记 第四十四天 HashSet 添加元素规则、树化规则和扩容规则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!