1.TreeSet
1.1概述
set特点 : 无序 不可重复,添加顺序和取出顺序不一定一致
TreeSet : 存进去的元素,会按照某个规则进行排序
数字 : 从小到大
字符串 : 每一位的ASCII
日期 : 自然日期
1.2使用方式
2排序
2.1Comparable
TreeSet为什么可以排序?
因为添加的元素都实现了Comparable接口
在向TreeSet中添加数据的时候,会自动调用该对象的compareTo()方法
所以 存储自定义类型的时候,如果要使用TreeSet 那么 必须实现Comparable接口
因为添加的时候 会自动调用Comparable中的compareTo方法,需要实现类实现
2.2Comparator
比较器两种方式 :
1 要添加的元素实现Comparable接口并覆写compareTo方法
2 集合比较器 : Comparator比较器,元素自身不需要实现该接口
如果添加的元素不是我们自定义的类
1 假如该类有排序,但是不是我们想要的结果,比如Integer,默认升序
但是我们想要降序 可以使用 Comparator
2 假如该类没有排序,没有实现Comparable,那么我们想要排序还是要使用Comparator
因为类不是我们写的,所以我们无法更改人家的源码
如果添加的元素是我们写的,那么想要排序 使用 Comparable ,这样如果不能满足其他用户的排序规则,
别人也可以使用 Comparator 进行更改
当comparable和comparator同时存在,那么 comparator的优先级大于 comparable
2.3Collections
List想要排序,元素必须实现Comparable接口
如果没有实现 需要用 Comparator
2.4练习题
3泛型
3.1概述
范型 : 类型检查,在编译时检查类型是否匹配
集合中 什么元素都能保存,太杂,优点就是可以保存任意类型的数据,缺点 就是操作起来必须先强制类型转换才行
否则因为多态,无法访问特有属性
引入范型之后,那么该集合中就只能保存指定类型,优点 : 操作起来方便,缺点 : 只能保存指定的类型
而结合实际操作,我们绝大部分都是用来保存统一类型的数据的
范型 只能写引用类型,不能写基本类型
使用大写字母表示 : A,B,C,D,E,F,......X,Y,Z 都是可以的,只不过是一个占位符而已
但是还是要合理选择
? 表示不确定的类型
T(Type) : 表示是一个具体的java类型
E(Element) : 表示是元素的类型 (集合中保存的是元素)
K , V
如果说规定了泛型,但是没有传入泛型类型,那么 默认是Object
3.2使用
在源码中使用E表示了范型
3.3自定义泛型