Set集合底层原理

1、Set集合特点

在学习Set集合之前我们应该学习Collection接口中的常用方法。因为Set集合是Collection的子接口。也就是说当我们使用Set集合时,我们不仅可以使用Collection接口提供的所有操作,还可以使用Set接口提供的特殊操作。

关于Collection提供的方法,在之前的List集合中我们已经说过了,这里不再说。
点击进入List集合底层原理
在探究底层原理之前,我们再来看一下集合的整体结构和Set集合的特点
在这里插入图片描述

2、HashSet集合的底层原理

HashSet集合的特点:无序、不重复、无索引

根据HashSet集合的特点,我们思考两个问题:

  1. 为什么添加元素时无序、不重复、无索引
  2. 增删改查数据有什么特点,适合什么场景

哈希值

我们先来介绍一下哈希值
在这里插入图片描述

HashSet集合底层原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

HashSet扩容原理

在Java中,HashSet是通过数组和链表(或红黑树)实现的。当Hashset中的元素个数达到负载因子(默认0.75)乘以当前容量时,就会触发扩容操作。
HashSet在扩容时会创建一个新的更大的数组,并将原有数组中的元素重新计算哈希值,然后放入新数组的对应位置。这个过程称为rehashing (再哈希)。

具体的扩容过程如下:

  1. 创建一个新的两倍大小(原容量乘以2) 的数组
  2. 遍历原数组中的每个非空元素。
  3. 对每个元素重新计算哈希值,并将其插入新数组的对应位置。如果多个元素计算得到的哈希值相同,则以链表(或红黑树)的形式存储。
  4. 将新数组设置为HashSet的底层数组,更新容量值.

通过扩容,HashSet能够保持较低的负载因子,减少哈希冲突,提高性能和效率。但同时,扩容过程也需要重新计算哈希值和重新插入元素,可能会涉及较大的数据迁移开销,因此在设计HashSet时需要考虑合适的初始容量和负载因子,以避免频繁扩容。

在这里插入图片描述

HashSet集合去重复机制

在这里插入图片描述
在这里插入图片描述

红黑树介绍

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、LinkedHashSet集合的底层原理

LinkedHashSet集合特点:有序、不重复、无索引
在这里插入图片描述
在这里插入图片描述

4、TreeSet集合底层原理

  1. TreeSet集合特点:不重复、无索引、可排序(默认升序排序,按照元素的大小,由小到大排序)
  2. 底层原理:基于红黑树实现的排序

注意:

  1. 对于数值类型:Integer,Double,默认按照数值本身的大小进行升序排序。
  2. 对于字符串类型:默认按照首字符的编号升序排序
  3. 对于自定义类型如Student对象,TreeSet默认是无法进行直接排序的

在这里插入图片描述
在这里插入图片描述

5、集合应用场景

在这里插入图片描述
在这里插入图片描述

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java集合框架是Java中用于存储和操作数据的重要工具。它提供了一组接口和类,用于处理不同类型的数据结构,如列表、集合、映射等。下面是Java集合框架的底层原理: 1. 数据结构Java集合框架中的数据结构可以分为两类:基于数组和基于链表。基于数组的数据结构如ArrayList,它使用动态数组来实现。基于链表的数据结构如LinkedList,它使用双向链表来实现。 2. 接口和实现类:Java集合框架提供了一组接口,如List、Set、Map等,定义了不同类型的集合操作。每个接口都有一些对应的实现类,如ArrayList、HashSet、HashMap等。 3. 迭代器:Java集合框架提供了迭代器接口(Iterator),用于遍历集合中的元素。迭代器隐藏了底层集合的具体实现细节,使得我们可以以统一的方式访问集合中的元素。 4. 泛型:Java集合框架使用泛型来支持不同类型的元素存储和操作。通过使用泛型,可以在编译时检查类型安全性,并提供更好的代码重用性和可读性。 5. 效率和性能:Java集合框架在设计上考虑了效率和性能。例如,ArrayList在随机访问元素时具有较好的性能,但在插入和删除元素时较差。LinkedList在插入和删除元素时具有较好的性能,但在随机访问元素时较差。 总的来说,Java集合框架的底层原理是通过不同的数据结构和接口实现类来提供高效的数据存储和操作功能,同时使用泛型来支持类型安全性。这些特性使得Java集合框架成为开发Java应用程序中不可或缺的工具之一。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海梦在飘扬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值