泛型
泛型
- 念:是一个未知的数据类型,是一个参数化类型
- 使用场景:需要定义一个类型,类型中的属性所属的数据类型不确定,或者类中的方法参数和返回值类型并不确定,使用一个符号来表示这个不确定的类型,这个符号就称之为泛型。
- 泛型的使用:
在使用带着泛型的类型时,需要确定这个泛型是哪一个类型。确定是哪一个类型,类中 就只能使用对应的类型。 - 使用泛型好处:
1、可以提高代码的扩展性
2、不需要对获取的每个数据进行强转
3、提前将问题暴露在编译时期 - 注意事项:
1、前后两个泛型要保持一致
2、如果前面的泛型确定了类型,后面的泛型可以不用写
3、泛型要定义在类后的尖括号中
4、泛型只能表示引用数据类型,不能表示基本数据类型
泛型类
- 概念:在定义类型的时候使用了泛型的类
- 格式:
class 类名<泛型>{
} - 说明:
1、如果要在类中使用某个泛型的话,需要先在类上进行声明,声明之后才可以使用
2、类中使用了几个泛型,需要在类上声明几个泛型
3、泛型符号:只要是一个合法的标识符即可。T E W Q
4、泛型在定义的时候不确定,但是在使用的时候就要确定是哪一个类型
泛型方法
- 概念:在定义方法的时候,带着泛型的方法。
- 格式:
修饰符 <泛型的声明> 方法名(){} - 说明:
1、如果需要在方法中使用泛型,首先需要在方法上先声明泛型
2、方法上声明哪一个泛型,就只能使用哪一个泛型
3、如果这个方法是一个静态方法,必须在方法上声明泛型,不能使用类上声明的泛型
4、如果这个方法是一个非静态的方法,可以使用类上声明的泛型,也可以自己定义
泛型通配符
- 概念:广泛的泛型。
- 分类:
?:类型通配符,所有的类型
? extends E:类型通配符上限,表示类型E的子类或者E类型
? super E:类型通配符下限,表示类型E的父类泛型或者E类型
Set集合
Set集合
- 概述:该集合继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了。
- 特点:
(1)在java.util包中,使用需要导包
(2)该类有两个实现类:HashSet 和 TreeSet
(3)该类元素特点:
不可重复:集合中不能存储相同的元素值
没有索引:集合中的元素没有一个特定的符号来表示
无序:元素存储的顺序和取出的顺序不能保证一致
Set集合的遍历
- 使用迭代器遍历
(1)获取迭代器对象
(2)hasNest方法判断集合中是否有下一个元素
(3)next方法获取下一个元素 - 使用增强for遍历
格式:
for(元素数据类型 元素名称:集合名称){
该元素的使用方式
} - 转数组遍历:
使用不带泛型转数组:toArray();
转数组之后,返回的数组是Object类型,使用数据的特殊方法时,需要向下转型
使用带着泛型转数组:toArray(T []):
转数组之后,返回的数组类型就是传递的数组类型,不需要向下转型
注意:
(1)如果传入的数组空间正好够用,将集合中的元素存储到传递的数组中
(2)如果传入的数组空间不够用,系统会新建一个相同数据类型的数组,来存储集合中的