复习Java集合(2)

1.Set集合

1.1Set集合概述和特点

Set集合的特点
	元素存取无序
	没有索引、只能通过迭代器或增强for循环遍历
	不能存储重复元素

1.2哈希值

哈希值简介
	是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
如何获取哈希值
	Object类中的public int hashCode():返回对象的哈希码值
哈希值的特点
	同一个对象多次调用hashCode()方法返回的哈希值是相同的
	默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同

1.3 HashSet集合概述和特点

HashSet集合的特点
	底层数据结构是哈希表
	对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致
	没有带索引的方法,所以不能使用普通for循环遍历
	由于是Set集合,所以是不包含重复元素的集合

构造方法
在这里插入图片描述
常用方法
在这里插入图片描述

1.4 HashSet集合保证元素唯一性源码分析【理解】

HashSet集合保证元素唯一性的原理
	1.根据对象的哈希值计算存储位置
		如果当前位置没有元素则直接存入
		如果当前位置有元素存在,则进入第二步
	2.当前元素的元素和已经存在的元素比较哈希值
		如果哈希值不同,则将当前元素进行存储
		如果哈希值相同,则进入第三步
	3.通过equals()方法比较两个元素的内容
		如果内容不相同,则将当前元素进行存储
		如果内容相同,则不存储当前元素

在这里插入图片描述

1.5常见数据结构之哈希表【理解】

在这里插入图片描述

1.6LinkedHashSet集合概述和特点

LinkedHashSet集合特点
	哈希表和链表实现的Set接口,具有可预测的迭代次序
	由链表保证元素有序,也就是说元素的存储和取出顺序是一致的
	由哈希表保证元素唯一,也就是说没有重复的元素
链接哈希集具有影响其性能的两个参数: 初始容量和负载因子 。 它们的定义精确到HashSet 。
初始容量:创建哈希表时桶的数量
负载因子:哈希表在其容量自动增加之前可以达到多满的一种尺度,
它衡量的是一个散列表的空间的使用程度,
负载因子越大表示散列表的装填程度越高,反之愈小。

2.Set集合排序

2.1TreeSet集合概述和特点【应用】

TreeSet集合概述
	元素有序,可以按照一定的规则进行排序,具体排序方式取决于构造方法
	TreeSet():根据其元素的自然排序进行排序
	TreeSet(Comparator comparator) :根据指定的比较器进行排序
	没有带索引的方法,所以不能使用普通for循环遍历
	由于是Set集合,所以不包含重复元素的集合

2.2 自然排序Comparable的使用

用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序的
自然排序,就是让元素所属的类实现Comparable接口,重写compareTo(T o)方法
重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写

实现Comparable接口
在这里插入图片描述

2.3 比较器排序Comparator的使用

用TreeSet集合存储自定义对象,带参构造方法使用的是比较器排序对元素进行排序的
比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare(T o1,T o2)方法
重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来
在这里插入图片描述

3.泛型

3.1 泛型概述和好处

泛型概述
	是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型
它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?
顾名思义,就是将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型。这种参数类型可以用在类、方法和接口中,分别被称为泛型类、泛型方法、泛型接口
泛型定义格式
	<类型>:指定一种类型的格式。这里的类型可以看成是形参
	<类型1,类型2…>:指定多种类型的格式,多种类型之间用逗号隔开。这里的类型可以看成是形参
	将来具体调用时候给定的类型可以看成是实参,并且实参的类型只能是引用数据类型
泛型的好处
	把运行时期的问题提前到了编译期间
	避免了强制类型转换

3.2泛型类【应用】

定义格式
	修饰符 class 类名<类型> { }

在这里插入图片描述

3.3泛型方法【应用】

定义格式
	修饰符 <类型> 返回值类型 方法名(类型 变量名) { }

在这里插入图片描述

3.4泛型接口【应用】

定义格式
	修饰符 interface 接口名<类型> { }

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

3.5类型通配符【应用】

类型通配符的作用
	为了表示各种泛型List的父类,可以使用类型通配符
类型通配符的分类
	类型通配符:<?>
		List<?>:表示元素类型未知的List,它的元素可以匹配任何的类型
		这种带通配符的List仅表示它是各种泛型List的父类,并不能把元素添加到其中
	类型通配符上限:<? extends 类型>
		List<? extends Number>:它表示的类型是Number或者其子类型
	类型通配符下限:<? super 类型>
	List<? super Number>:它表示的类型是Number或者其父类型

在这里插入图片描述

4.可变参数

4.1可变参数【应用】

可变参数介绍
	可变参数又称参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了
可变参数定义格式
可变参数的注意事项
	这里的变量其实是一个数组
	如果一个方法有多个参数,包含可变参数,可变参数要放在最后

4.2可变参数的使用【应用】

Arrays工具类中有一个静态方法:
	public static List asList(T... a):返回由指定数组支持的固定大小的列表
	返回的集合不能做增删操作,可以做修改操作
List接口中有一个静态方法:
	public static List of(E... elements):返回包含任意数量元素的不可变列表
	返回的集合不能做增删改操作
Set接口中有一个静态方法:
	public static Set of(E... elements) :返回一个包含任意数量元素的不可变集合
	在给元素的时候,不能给重复的元素
	返回的集合不能做增删操作,没有修改的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值