重写compareTo方法后,为什么return this.age-s.age是升序,反之是降序

在一个学生类中,重写compareTo(Student s)方法后,为什么return this.age-s.age是升序,反之是降序,这里的age是个int类型的成员变量

compareTo方法只是用来计算两个数的大小。

  1. this.age大于s.age时,返回1,说明当前对象属性值比参数大。
  2. this.age小于s.age时,返回-1,说明当前对象属性值比参数小。
  3. this.age等于s.age时,返回0,说明当前对象属性值与参数相等。

Collections.sort()才是实现排序的方法。
sort方法默认的排序规则是升序。
可以定义一个基础数据类型的集合,对集合数据进行排序,默认是升序的结果。

ArrayList<Integer> list=new ArrayList<>();
list.add(1);
list.add(5);
list.add(3);
Collections.sort(list);
System.out.println("排序结果:"+list);

实现 Comparable 的类必须实现 compareTo(Object o) 方法,两个对象即通过 compareTo(Object o) 方法的返回值来比较大小。

如果当前对象 this 大于形参对象 o ,则返回正整数,
如果当前对象 this 小于形参对象 o ,则返回负整数,
如果当前对象 this 等于形参对象 o ,则返回零。
实现 Comparable 接口的类的对象数组(和有序集合)可以通过 Arrays.sort(和 Collections.sort )进行自动排序。

Comparable的典型实现:(默认都是从小到大排序)
看你返回值的大小升降

首先纠正下,一般compareTo返回-1,0,1,并不直接返回“return this.age-s.age”
当元素个数少于32个时使用二分排序法,会将-1的结果的对象排在前面,如下图

img

如果是this.age-s.age那么排在前面的就是this.age较小的,这样才是-1
如果是s.age-this.age那么排在前面的就是this.age较大的,这样才是-1
所以喽this.age-s.age是升序,反之是降序

this.age-s.age :
如果为正数,自己排到后面,实际上自己比别人大,这就是升序;
s.age - this.age :
如果为正数,自己排到后面,实际上别人比自己大,这就是倒序

这个比较器的解释 ,不知能否帮到你哦
http://www.java265.com/JavaJingYan/202203/16485461582619.html