HashSet 原理结构


HashSet 底层是采用 HashMap实现的

JDK1.8版本之前: 哈希表 = 数组+链表
JDK1.8版本之后: 哈希表 = 数组+链表+红黑树(提高查询速度)



原理:

首先存储数据到集合中,先计算元素的哈希值;
将元素进行分组,相同hash值的元素为一组,链表是把相同的Hash值的元素连在了一起;
如果链表的长度超过了8位,那么就会把链表转化为红黑树。
在这里插入图片描述

红黑树:

在这里插入图片描述

特点:

1. HashSet中不允许存储重复元素
2. HashSet没有索引,不能使用普通for循环遍历
3. HashSet是无序的(意思是存储和取出的顺序不一致)
4. 底层是一个Hash表(又称散列表)

不允许有重复元素的实现原理:前提是存储的元素必须 重写hashCode方法和equals方法
(equals重写前比较的是两个对象的地址值,重写之后比较两个对象的内容)
在添加元素的时候,Set集合在调用add方法的时候,add方法会调用元素的hashCode方法和equals方法,判断元素是否重复
具体例子如下:(图片可能不是很清晰,来源于b站视频截图)

在这里插入图片描述



尊重原创,转发请附上链接!

谢谢!





  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值