Set接口: HashSet源码

set接口基本介绍在这里插入图片描述
Set接口的实现类对象(Set接口对象),不能放重复的元素,但是可以放null;
Set接口对象存放数据是无序的,
取出的顺序不是添加的顺序,但取出的顺序是固定的
在这里插入图片描述
HashSet全面说明
在这里插入图片描述
HashSet案例
在这里插入图片描述
new Dog(“lucy”)之所以可以是因为new之后相当于创建了一个新的对象,只不过名字相同而已(“与同名的两个人类似”)
在这里插入图片描述
HashSet底层机制说明
在这里插入图片描述
链表简述如下所示
在这里插入图片描述
在这里插入图片描述
HashSet扩容机制
在这里插入图片描述
HashSet扩容底层源码
在这里插入图片描述
源码
在这里插入图片描述
在这里插入图片描述
h >>> 16 无符号右移16位
第一个add : HashSet.add(“java”)
在这里插入图片描述

在这里插入图片描述
第二个add : HashSet.add(“php”)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
php添加成功
在这里插入图片描述
第三个add : HashSet.add(“java”)
前面几步跟上面都是一样的
在这里插入图片描述
在这里插入图片描述
stepinto到下图位置
在这里插入图片描述
上图判断不为空则继续
在这里插入图片描述
在这里插入图片描述
如果table对应的索引位置已经是一个链表
就使用for循环依次比较
1.依次和该链表的每个元素比较后,都不相同,则加入到该链表的最后
注意,把元素添加到链表后,立即判断 该链表是否已经到达8个结点,
如果到达8个,就调用treeifyBin()对当前这个链表进行树化(转成红黑树)
注意,在转成红黑树时,要进行判断,判断条件如下
在这里插入图片描述

如果上面条件成立,先table扩容,
只有 条件不成立时,才进行红黑树树化
2.在依次比较过程中,如果有相同的情况,就直接break
在这里插入图片描述
在这里插入图片描述
继续回到第三个add : HashSet.add(“java”)的流程,走下面不返回空,则代表添加失败,所以java没有添加进去
在这里插入图片描述
HashSet底层扩容机制说明
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值