在一个学生类中,重写compareTo(Student s)方法后,为什么return this.age-s.age是升序,反之是降序,这里的age是个int类型的成员变量
compareTo方法只是用来计算两个数的大小。
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的结果的对象排在前面,如下图
如果是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