Java的Comparable接口重写comparaTo方法问题

2025-04-05 10:39:25
推荐回答(2个)
回答1:

看你排序的时候怎么调用这方法了compareTo。
假设一个类Test实现了compareTo接口,然后对一个List list进行排序,然后我们用java.util.Collections.sort(list)这方法排序,那现在就去看看Collections.sort这方法的源码,我们可以看到最终实现排序的地方在Collections.sort(list)-->Arrays.sort(a)-->mergeSort(aux, a, 0, a.length, 0)的这段代码里:
for (int i=low; i for (int j=i; j>low &&
((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)
swap(dest, j, j-1);
return;
现在就能看到是((Comparable) dest[j-1]).compareTo(dest[j])>0这一句调用了compareTo方法(就是我们刚才实现的那个接口),这句代码的意思就是假设前一个对象Test与后一个Test相比,如果compareTo返回的结果大于0,那么就swap(交换),然后再回到你这问题“为什么return this.age-s.age; 就是按升序排序,反过来就是降序排序”,this.age-s.age如果大于0,那么就swap交换,那就是比较大的age就被交换到后面去了,所以就是升序了。“反过来就是降序排序”。。懂了吧。

回答2:

这是一个compareTo的算法!这里s.age-this.age>0就认为s对象大于this对象!即s放在this的前面!其实你代码是有问题的!