Java攻略集合之泛型
泛型
概述:是JDK5中引入的特性,它提供了编译时类型安全检测机制
泛型的好处:
1、把运行时期的问题提前到了编译期间
2、避免了强制类型转换
泛型可以使用的地方:
类后面——泛型类
方法声明上——泛型方法
接口后面——泛型接口
如果一个类的后面有<E>,表示这个类是一个泛型类。
创建泛型类的对象时,必须要给这个泛型确定具体的数据类型
泛型的定义格式:
1、<泛型> :指定一种类型的格式
尖括号里面可以任意书写,按照变量的定义规则即可,一般只写一个字母
比如:<E> <T> <Q> <M>
2、<类型1,类型2...>:指定多种类型的格式,多种类型之间用逗号隔开。
比如:<E,T> <Q,M> <K,V>
泛型类的定义格式:
格式:修饰符 class 类名<类型> { }
范例:public class Generic <T> { }
此处T可以随便写为任意标识,常见的如T,E,K,V等形式的参数常用于表示泛型
泛型方法
泛型方法的定义格式:
格式:修饰符 <类型> 返回值类型 方法名(类型 变量名){ }
范例:public <T> void show(T t) { }
泛型接口
泛型接口的使用方法:
1、实现类也不给泛型
2、实现类确定具体的数据类型
泛型接口的定义格式:
格式:修饰符 interface 接口名<类型> { }
范例:public interface Generic<T>{ }
类型通配符
类型通配符:<?>
ArrayList<?>:表示元素类型未知的ArrayList,它的元素可以匹配任何的类型
但是并不能把元素添加到ArrayList中了,获取出来的也是父类类型
类型通配符上限:<? extends 类型>
比如:ArrayList<? extends Number> : 它表示的类型是Number或者其子类型
类型通配符下限:<? super 类型>
Set集合概述和特点
Set集合特点
可以去除重复
存取顺序不一致
没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取,删除Set集合里的元素
TreeSet集合概述和特点
TreeSet集合特点
1、不包含重复元素的集合
2、没有带索引的方法
3、可以将元素按照规则进行排序
自然排序Comparable的使用
1、使用空参构造创建TreeSet集合
2、自定义的Student类实现Comparable接口
3、重写里面的compareTo方法
自然排序简单原理图
1、如果返回值为负数,表示当前存入的元素是较小值,存左边
2、如果返回值为0,表示当前存入的元素跟集合中元素重复类,不存
3、如果返回值为正数,表示当前存入的元素是较大值,存右边
比较器排序Comparator的使用
1、TreeSet的带参构造方法使用的是比较器排序对元素进行排序的
2、比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare(T o1,T o2)方法
3、重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写
两种比较方式小结
自然排序:自定义类实现Comparable接口,重写compareTo方法,根据返回值进行排序
比较器排序:创建TreeSet对象的时候传递Comparator的实现类对象,重写compare方法,根据返回值进行排序
在使用的时候,默认使用自然排序,当自然排序不满足现在的需求时,使用比较器排序
以上就是我的分享,有什么不对的地方,欢迎在评论区中指出,我定会虚心修改!