Java:泛型,Set

泛型:

泛型 :

是对,类 ,接口后者方法的一个约束,泛型其实就是一个参数来替换所有的类型 (泛型中没有继承)

场景:
当不知道集合存什么类型的数据的时候就使用泛型

泛型里一般表示的之母:
T E W K V

在实例化集合泛型的语法:

在jdk1.7之后 ArrayList list = new ArrayList<>(); (注意点就是后面<>里的可以省略,前面不可以进行省略)

在jdk1.7之前 ArrayList list = new ArrayList();必须这样写, 前后的泛型类型必须是一样

泛型来约束类

public class ArrayList
语法: 访问修饰符 关键字(class) 类名<泛型>{
类里的具体的内容
}
注意点 :

  1. 在 写这个类的具体的信息的时候,没有给其具体的类型
    2. 也就是在new 的时候给其具体的类型
    3.当给类加泛型之后,类里所有的都可以使用这个泛型

// 需求 模仿 LinkedList 实现 addFrist() 和 remove() 在描述这个类的时候不能给其具体的泛型

在这里插入图片描述

给方法来定义泛型:

作用: 也就是对方法来进行约束
语法 : 访问修饰符<泛型> 返回值类型 方法的名称(参数(参数可以使用泛型的数据类型)){
方法体
}
注意点:
在调用其方法的时候知道其泛型

静态方法:

也可以加泛型:
需求:
定义一个 方法 ( 有一个数组, 数组里的泛型是不固定, 要实现数组里元素值进行交换)
在这里插入图片描述

注意点:
静态方法不能使用类的泛型的,只能有方法的泛型

泛型接口:

语法:
访问修饰符 interfance 接口的名称{
抽象方法
}

泛型接口的实现类分两种:
1、接口在被一个类实现后这个类还是一个泛型类,可以直接使用泛型接口中的泛型符号,而且泛型符号必须和接口中定义的符号一致
2、接口在一个类实现后,可以把泛型替换为明确数据类型

泛型通配符

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

Set:

Set

  1. 父类是Collection
  2. 不能包含重复的元素
  3. 无序(不能使用普通的for循环)
  4. 常规的方法跟 Collection 是一样的

Set集合的遍历:

1.第一种使用没有泛型 转换成数组的方式
2.使用带泛型,转换成数组的方式
3.使用迭代器的方式
4.使用增强for 循环的方式
注意点:因为没有索引,索引不能够使用普通for循环
在这里插入图片描述

set集合不能够值重复的原因:
实际上是使用map来进行存,是以键值对来进行存 map的键是不能够重复的
==> 实际上调用了两个方法, 一个是hashcode 方法 , 一个equals()
在这里插入图片描述

HashSet存储特点:

  1. 基层存 是由哈希表结构进行存(查询速度快)
    2. 不能包含重复的元素,可以包含"" 的数据 用于检查是否重复,执行了两个方法 第一个是HashCode方法 第二个是equals()方法
    3.无序(不能使用普通的for循环) :存入的数据顺序与取出来的顺序不一样

HashSet保证元素唯一性原理的总结:

1、某个对象obj,在即将要存储到HashSet集合的时候,首先计算obj的hashCode值
2、在集合中的所有元素的哈希值,都和obj的哈希值不同,说明在集合中不存在obj,可以直接将obj存储到HashSet中
3、在集合中有若干元素的哈希值,和obj的哈希值相同,并不能说明obj已经存在于集合中,需要使用equals判断obj是否和那些与自己哈希值相同的元素是否相等
4、如果这些元素所有的和obj比较equals之后,都不相等,那么就说明obj不存在于集合中,可以将obj存储到HashSet中
5、如果这些元素有任意一个和obj比较equals之后,发现相等,那么就说明obj已经存在于集合中,所以obj就不能存储,存储失败。

LinkedHashSet:

是HashSet的一个子类,和HashSet保证元素唯一的原理相同。
将每个元素在存储的时候,都记录了前后元素的地址

效果:
可以根据存储元素的顺序,将元素取出
应用:
既需要保证元素的唯一,又需要保证原来的顺序,就可以考虑LinkedHashSet类型

存的方式是采用的数据+ 双重链表式
第一种 链表式用于来把相同hash值的元素进行串联
第二种 链表式来记录每一值的顺序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值