Set 的俩个实现类 HashSet TreeSet底层结构源码

前言
Set 接口常见俩个实现类 :HashSet TreeSet
倆个类的主要保存单列数据,数据无序不重复
无序指写入顺序和取出顺序不一样
HashSet TreeSet 基本操作都几乎相同,不同的是TreeSet 默认会将数据排序
所以TreeSet 里面不能保存null 元素

HashSet 底层结构和源码
HashSet 创建底层直接创建了hashMap
hashMap 底层是hashtable 就是hash表
HashSet 底层维护了hashMap ,也是和hashMap 底层一样,是基于hash表结构的
在这里插入图片描述
HashSet 怎么实现不可重复?
新元素不是使用equals 和原來元素比較
它是获取新元素的hashcode,通过位运算获取index
如果该索引没有其他值,直接添加
如果该索引有其他元素,则需要equals方法判断,如果不相等则以链表方式追加到已经有的元素后面,判断次数很少
如果相等则返回false,直接覆蓋
防止hashcode相等或者让相同对象hashcode相等可以重写hashCode方法
在这里插入图片描述
重写hashcode原则:
在这里插入图片描述
当然也可以使用idea等编码工具重写hashCode() equals() 方法

TreeSet 底层结构和源码
TreeSet 特点

不容许重复,不能为null,元素必须可排序
可以实现对里面元素排序 排序有俩种,自然排序  定制排序

TreeSet 结构和HashSet类似,底层维护treeMap 也是一个hashtable
排序是基于红黑数进行的排序,红黑树是二叉树的一种

如何实现去重?
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值