Hashset扩容机制

首先要了解:Hashset的底层为Hashmap,而Hashmap的底层是数组+链表+红黑树(如下图):
在这里插入图片描述
以下将数组加链表的整体称作数据表。

Hashset扩容机制:

  1. 添加一个元素时,先得到hash值,再将hash值转化为索引值(放在数组的哪个位置)。
  2. 找到数据表,查看该索引的位置是否有元素。
  3. 若没有元素,则直接添加。若有元素,则调用equals()方法比较,如果相同,则不添加,若不同,则加在尾部(即链表里边)。
  4. (jdk8中):当链表中元素的个数达到8,同时数组中的个数超过64时,就会进化成红黑树(进一步提高查询效率)。 注:若链表中元素的个数到8,而数组未到64,则按数组容量*2进行扩容,直到扩容到64,再树化。

注:
1 . 第一次添加时,系统会扩容到16,阈值为加载因子(0.75)16=12。
2 .当整个数据表中的元素个数达到12,在将要插入第十三个元素时,会触发数组扩容(16
2),此时阈值变为32*0.75=24.以此类推,直到数组容量达到64,则树化。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值