第一讲 TreeSet程序员
一、 概述安全
TreeSet能够对Set集合中的元素进行排序,按照天然顺序排。数据结构
二、 演示代码框架
输出结果:函数
总结:TreeSet会对元素进行天然排序,大写排在小写前面。3d
第二讲 TreeSet存储自定义对象对象
一、 概述:blog
将自定义对象存储到TreeSet集合中。排序
二、 思路:接口
自定义学生类,并将学生对象存储到TreeSet中,在存储过程当中按照年龄排序。
三、 练习:往TreeSet集合中存储自定义对象(学生),并按照学生年龄进行排序
小结:
自定义对象须要重写Comparable接口中的compareTo()方法:由于TreeSet是有序的,在添加元素时,会将新的元素与TreeSet中已有元素进行比较,调用Comparable接口中的compareTo()方法。自定义对象须要定义本身的比较原则,因此要重写Comparable接口中的compareTo()方法。
第三讲 二叉树
一、 概述:
TreeSet的底层数据结构是二叉树,能够对Set集合中的元素进行排序。其保证元素惟一性的依据是:compareTo()方法,若是返回0,则元素重复,元素不添加到集合中。
二、 TreeSet排序
第一种排序方式:让元素自身具有比较性,所以,元素须要实现Comarable接口,覆盖compareTo方法。
第四讲 实现Comparator方式排序
一、 概述:TreeSet的第二种排序方式
当元素自身不具有比较性时,或者具有的比较性不是所须要的,这时就须要让集合自身具有比较性——让集合在初始化时,就有了比较方法
二、 第二种排序方法实现思路
定义一个类,实现Comparator接口,并覆盖接口中的compare方法。以第二讲中学生为例:学生元素自身带有了按年龄排序的方法,但咱们的集合须要进行姓名排序,若是要修改学生中的代码比较麻烦,咱们能够定义的一个类封装按姓名排序的方法,并将该类对象提供给TreeSet使用。
三、 实现代码以下:
练习:按字符串长度排序
思路:字符串本省具有比较性,可是它的比较方法不是所需的,这时就只能使用比较器。
实现代码以下:
小结:任何对象均可以根据实际要求进行排序,自定排序器并将排序器对象传给集合使用,这种方法比较方便。在比较字符串时,能够直接调用String类中的方法compareTo进行字符串天然排序。
第六讲 泛型概述
一、 定义
泛型:JDK1.5版本之后出现的新特性。用于解决类型安全问题,是一个类型安全机制。
二、 好处
1) 将运行时期出现的问题ClassCastException,转移到了编译时期,方便程序员解决问题,让运行时问题减小,更安全。
2) 避免了读取元素时强制类型转换的麻烦;
三、 代码实现
第七讲 泛型使用
一、 泛型在比较器中的应用
泛型格式:经过<>来定义要操做的引用数据类型。
使用泛型的状况:泛型的时候使用在集合框架中很常见,只要见到<>就要定义泛型(API文档中的接口、类、方法等有<>标识的,在使用它们的时候就须要定义泛型)。
<>标志符:用来接收类型,当使用集合时,将集合中要存储的数据类型做为参数传递到<>中便可。
二、 代码实现
第八讲 泛型类
一、 定义
定义泛型类的状况:当类中要操做的引用数据类型不肯定时,早期的作法是:定义Object来完成扩展。有了泛型以后:能够定义泛型类来完成扩展。
二、 代码实现
第九讲 泛型方法
一、 概述
为了让不一样方法能够操做不一样类型,并且类型不肯定,能够将泛型定义在方法上。定了泛型的方法就是泛型方法。
二、 代码示例
三、 泛型函数特殊之处
静态方法不能够访问类上定义的泛型。若是静态方法操做的应用数据类型不肯定,能够将泛型定义在方法上。
第十讲 泛型接口
实现泛型接口的类,也不肯定要处理的数据类型,此时能够将此类定义成泛型。
第十一讲 泛型限定
一、 定义
限定泛型可接收的类型,有“上限定”和“下限定”两种。
1)? extends E :能够接收E类型或这E的字类型,上限定;
2)? super E:能够接收E类型或者E的父类型,下限定;
二、 泛型限定应用
“?”——通配符,也即占位符。
以下代码:利用泛型上限(Person及其子类)定义了一个函数,并用子类(Student)对象调用该函数。
说明:Student和Worker都是Person的子类。用Person类定义了比较器,存储了Student和Worker类型的TreeSet均可以调用该比较器,这体现了泛型下限的特性。
知识点总结
知识点总结
一、 在给TreeSet集合定义比较器时,须要实现Comparator接口中的compare(Object o1,Object o2)方法,若要使得倒序存储,只需将实现比较代码中的o1和o2这两个参数兑换位置。
二、 TreeSet集合中元素的两种排序方法:
1) 定义在元素内部
实Comparable接口中的CompareTo方法。
2) 自定义比较器
实现Comparator接口中的compare方法,并将比较器对象传给集合。
注意:当二者同时存在时,“自定义比较器”优先。
三、 重写equals方法时,不能赋泛型,所以,须要进行强制类型转换后才能使用equals方法。
四、 泛型类的做用:避免了强转,并使类型转换错误发生在编译时期,方便修改。
五、 泛型方法能够提升程序功能的扩展性,使得函数更加通用。
六、 自定义泛型类:只能是自定义的数据类型,不能是基本数据类型。
七、 静态方法不能够访问类上定义的泛型,缘由是: