活动地址:CSDN21天学习挑战赛
- 此接口对实现它的每个类的对象进行了总排序。这个顺序被称为类的空自然排序;
- 该接口是用来实现对象的排序比较的一个接口,一般自定对象要实现按照一定规则进行排序(比如说要求按照升序或者是降序排列显示);
在 TreeSet() 中是根据通过 Comparable 给其元素的自然排序进行排序的;
但是有时候我们存入 TreeSet() 的类型是我们自己构造的自定义类类型,这种情况下 Comparable 就无法对其进行排序了;

(1)
自定义类无法进行排序的原因很简单,因为该类型没有去实现 Comparable 接口,故我们要想对自定义类进行排序第一步就是通过 implements 实现 Comparable 接口,并重写 compareTo 方法;

(2)
但是这时候我们会发现输出后只有一条数据;

原因很简单,当我们看我们重写的 compareTo 方法,

因为我们重写的 compareTo 方法的返回值是 0 ,所以被判定为全都是相同的数据,而通过 Set 集合存储的元素是不能有重复的元素,故只真正存储进了一个元素;
我们可以通过将返回值更改为大于 0 或小于 0 ,大于零表示当前存入的元素比较大,小于零表示当前存入的元素比较小,故大于零的返回值可以根据提交的数据进行按时间升序排列,而小于零的则是降序;
(3)
如果我们要通过年龄大小进行排序可以通过年龄相减的方式判断哪个年龄更大;
升序就让 this 在前,降序就让 this 在后;

该方法的原理是将新加入的元素先跟第一个加入的元素进行对比,如果该元素更大则跟比第一个元素更大的元素进行对比反之则跟更小的元素对比直到找到确定的位置;
(4)
这时候又出现的一个新的问题,如果两个年龄相等时,又会被判定为同一个元素,所以我们应该要加入一个判断是否相等的条件;

得到:

如果想对姓名也进行排序也可以通过对姓名进行调用 compareTo 方法的判断;
