首页 > 其他分享 >Set系列集合

Set系列集合

时间:2023-06-22 10:33:21浏览次数:20  
标签:Set 系列 重复 元素 索引 哈希 集合 排序

Set系列集合

  • 无序:存取顺序不一样

  • 不重复:可以去除重复的

  • 无索引:没有带索引的方法,所以不能使用普遍for循环遍历,不能用索引获取元素

set集合的实现类

  • HashSet:无序 不重复 无索引

  • LinkedHashSet:有序 不重复 无索引

  • TreeSet:可排序 不重复 无索引

 

Set接口中的方法上基本与Collction的API一致

哈希值

  • 根据hashCode方法算出来的int类型的整数

  • 该方法定义在Object类中,所有对象都可以调用,默认用地址值计算

  • 一般情况下,会重写hashCode方法,利用对象内部的属性值计算哈希值

对象哈希值的特点

  1. 如果没有重写hashCode方法,,不同的对象计算出的哈希值是不同的

  2. 如果已经重写hashCode方法,不同的对象只要属性值相同,计算出的哈希值就一样的

  3. 在小部分情况下,不同的属性值或不同的地址值计算出来的哈希值也就有可能一样(哈希碰撞)

HashSet底层原理

  1. 创建一个默认长度为16,默认加载因子0.75的数组,数组名table

  2. 根据元素的哈希值跟数组的长度计算出应存入的位置

  3. 判断当前位置是否为null,如果是null直接存入

  4. 如果位置不为null,表示有元素,则调用equals方法比较属性值

  5. 一样:不存 不一样:存入数组,形成链表

LinkedHashSet底层原理

有序 不重复 无索引

有序:保证存储和取出的元素顺序一致

原理:底层数据结构依然是哈希表,只是每个元素有额外的多了一个双链表的机制记录存储的顺序

TreeSet

对数值类型,默认按从小到大的顺序排序

对字符 字符串类型,按照字符在ASCII码表中的数字进行排序

特点:可排序 不重复 无索引,底层基于红黑树实现排序,增删改查性能良好

TreeSet的排序规则

  1. Javabean实现compavable接口,指定比较规则

  2. 创建集合时,自定义comparator比较器对象,指定比较规则

默认第一种 当第一种不满足时用第二种

方法返回值的特点

负数:表示当前要添加的元素是小的存左边

正数:表示当前要添加的元素是大的村右边

0:表示当前要添加的元素已存在 舍弃

 

注意

1.如果想要集合中的元素可重复

用ArrayList集合

2.如果想要集合中的元素可重复,且增删操作明显多于查询

用LinkedList集合,基于链表的

3.如果相对集合中的元素去重

用HashSet集合,基于哈希表的

4.如果相对集合中的元素去重,而且保证存取顺序

用LinkedHashSet集合,基于哈希表和双链表,效率低于HashSet

5.如果想对集合元素进行排序

用TreeSet集合,基于红黑树 后续也可以用List集合实现排序

标签:Set,系列,重复,元素,索引,哈希,集合,排序
From: https://www.cnblogs.com/longlonglong777/p/17497556.html

相关文章

  • Java—集合框架
    什么是集合......
  • 全球溯源中心系列成果发布,巨杉数据库积极参与溯源产业应用生态
    巨杉数据库作为溯源+数据库技术应用企业,凭借多年深耕文档型分布式数据库的技术积累和创新能力,受邀参与全球溯源中心标准系列成果发布及溯源产业应用启动仪式。6月19日,“链接世界预鉴未来”——全球溯源中心系列成果发布活动在广州南沙成功举办。巨杉数据库作为溯源+数据库技术应......
  • 「Solution Set」JOISC 2022
    Day1监狱首先我们感性理解:每名囚犯一定是依次走到自己的目的地的。因为如果起点或终点挡着别人的路,让他先走到目的地就行了。而在中间的话还容易挡着别人的路。所以如果一个人的起点在另一个人的路径上,那么这个人必须先走,如果一个人的终点在别人的路径上,那么这个人必须后走。......
  • Vue的set主要是做什么的
    这个时候可以用this.$set(),给新添加的对象属性,或数组元素添加getter,setter方法简单说即是:当你发现你给对象加了一个属性,在控制台能打印出来,但是却没有更新到视图上时,也许这个时候就需要用到this.$set()这个方法了methods:{btn(){Vue.set(this.student,'age......
  • 转:ASP.NET Core Identity系列之八
    转自:https://mp.weixin.qq.com/s?__biz=MzA3NDM1MzIyMQ==&mid=2247486215&idx=1&sn=9bd90b0c1d2d5583b8da324cbb56c5a6这一节我们主要介绍在ASP.NETCoreIdentity中使用策略进行授权,Policy是用户必须具备一组集合为授权访问应用程序上的资源。IdentityPolicy的授权可以包含对用......
  • 【淘宝API接口系列】获取sku详细信息Java获取源代码演示
    ​ 淘宝商品SKU详细信息API接口是指通过开放平台提供的API接口,可以根据商品ID和SKUID等参数,获取淘宝商品SKU的详细信息,包括SKU的价格、库存、销售属性、skuUrl、sku图片等。其作用是方便开发者通过调用API接口,获取淘宝商品SKU的详细信息,进而实现商品价格比较、商品数据采集、......
  • 转:ASP.NET Core Identity 系列之五
    转自:https://mp.weixin.qq.com/s?__biz=MzA3NDM1MzIyMQ==&mid=2247486194&idx=1&sn=a213c72dd0564c31a7624c6d99f0d277这节我们将介绍在Identity中如何使用Role,在我们应用程序中可以通过ASP.NETCoreIdentity创建Roles并且该角色可以包含一系列权限来执行应用程序的一系列活动......
  • 转:ASP.NET Core Identity 系列之四
    转自:https://mp.weixin.qq.com/s?__biz=MzA3NDM1MzIyMQ==&mid=2247486183&idx=1&sn=baeb28f24399a9b0203f33185e1399a6这节我们主要介绍ASP.NETCoreIdentity认证,认证是决定用户是否能够成功登录应用程序的一个过程,用户通过提供自己的用户名和密码来证明他们自己是真实用户,当登......
  • 有了它,再也不用写setContentView了!好用,真的好用~
    前言大家多多少少都用过或者看过注解(Annotation),比如最常见@Override、@Deprecated等。近年来一些比较流行的三方框架都使用的注解,像ButterKnife(渐渐被Databinding、ViewBinding取代,已经停止维护)、Dagger、Room等等。那为什么这些大牛都这么热衷于使用注解呢?原因肯定是注解的好处多......
  • Postgresql 数据库导入导出 物理VS逻辑 集合
    PostgreSQL数据的导入导出本身并没有特别高的技术要求,属于日常操作,但熟悉导入导出以及选择数据导入导出的方式还是有点思考空间的。怎么导出数据的方式更稳妥,更适应业务的需求。下面就先总结数据导入导出中的数据导出的一部分方式和命令的实例,其中一些也是我在总结中发现的,例如COP......