set集合

#set集合#
1、集合框架Set(HashSet哈希表存储、重复元素存储底层探究)
2、集合框架TreeSet(自然排序、数据结构二叉树、比较器排序)
3、泛型(概述及使用、泛型类、泛型方法、静态方法泛型、泛型接口)

#集合框架Set#
元素是无序(存入和取出的顺序不一定一致),元素不可以重复;
set集合的功能与Collection集合的功能是一致的(就方法调用而言);
HashSet哈希表存储
底层数据结构是哈希表
hashest本身具备去重的功能

HashSet存入重复元素的列子
同姓名同年龄视为同一个人 ,重复元素
在这里插入图片描述
从代码上看,equals方法没有被调用
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法:hashCode与equals方法来完成;如果hashCode值相同,才会判断equals是否为true;如果hashCode值不同,那么不会调用equals。

注意:对于判断元素是否存在,以及删除等操作,依赖的方法同样是hashCode、equals方法。

List与Set判断重复对象的区别?
List只依赖于equals方法
Set依赖于hashCode、equals方法

#集合框架TreeSet#
2.1、TreeSet自然排序
TreeSet可以对set集合中元素进行排序
String实现了Comparable接口,所以可以直接进行排序.
引用数据类型想要排序,必须实现Comparable接口
其他引用数据类型没有实现Comparable接口,那么会出java.lang.ClassCastException: com.javaxl.Peroon cannot be cast to java.lang.Comparable,实现引用数据类型实现此接口就没问题了。
案列:
给已知的集合进行排序
当给对象赋予自然排序的时候必须按照以下规则来,先判断主要条件 ,再判断次要条件
前面的排序规则只适用于近一周的福利模板(先按年龄,在按姓氏)
系统中有另一个模块,需要对用户表中排序规则进行更改(先按姓氏,在按年龄)
比较器comparator接口
作用:使得容器具有比较性
在这里插入图片描述
在这里插入图片描述
2.2、TreeSet数据结构(二叉树)
①可以对set集合进行排序,底层数据结构是二叉树;保证元素唯一性的依据是,compareTo方法return 0
注意:TreeSet排序的第一种方式,让元素自身具有比较性;元素需要实现Comparable接口,覆盖compareTo方法;这种方式也被称为元素的自然顺序,或者叫做默认顺序。

②那么如何让TreeSet集合中的元素怎么存进去怎么取出来呢?
compareTo方法返回值为正数,返回值写死,那么就是怎么存进去怎么取出来。
compareTo方法返回值为负数数,返回值写死,那么就是先进后出。

③TreeSet比较器排序
TreeSet排序的第二种方式
当元素自身不具备比较性时,或者具备的比较性不是所需要的;

注意:这时需要让集合自身具备比较性
在集合初始化时,就有了比较方式;
定义一个类,实现comparator接口,实现compare方法当两种排序都存在时,比较器排序优先级更高
因此比较器用的多一些,在实际开发中,很多时候,引用数据类型是否具有比较性,或者比较规则,可能不由开发人员自己决定,那么开发人员想要对应的引用数据类型按照自己的排序方式进行排列,那么就需要实现comparator接口,实现compare方法
案列同上:

#泛型#
1、泛型方法在哪里使用?
泛型的使用方法, 可以在类、接口、方法中
用,分别简称之泛型类、泛型接口、泛型方法

2、泛型的本质?
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,类似于方法中的变量参数。
3、缺点
在没有使用泛型的情况下,如果要实现参数“任意化”,通常会定义成Object类型来接受,然后强制类型转换使用;而强制类型转换有明显的缺点,就是必须要知道实际参数的具体类型的情况才可以进行转换,同时在强制转换的过程中,编译器不会报错提示的,只有在运行阶段才会出现异常,一定程度上存在安全隐患。
4、泛型的作用?
①将运行时的异常转移到编译期
②升了代码的健壮性
在这里插入图片描述
泛型方法的定义:访问权限+<泛型标示>+泛型标示名称(泛型标示 参数名称 用泛型方法是为了可以接受任意类型,然后返回相应的类型)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值