compareTo 是如何sort的
来源:8-7 Leetcode上优先队列相关问题

慕慕641757
2018-06-10
@Override public int compareTo(Freq another){ if(this.freq < another.freq){ // System.out.print("1:"+this.freq + " " + another.freq); return 1; } else if(this.freq > another.freq){ //System.out.print("-1: this.freq is "+this.freq + " " + "another.freq is " + another.freq); return -1; } else{ //xSystem.out.print("0:"+this.freq + " " + another.freq); return 0; } }
1回答
-
compareTo 不是一个排序算法。compareTo的作用是定义对于当前的类来说,什么是大,什么是小,也就是两个这个类对象之间如何进行比较。Java的sort方法要依赖于compareTo,因为只有知道两个对象之间如何进行比较,才可以进行排序。当然,如果你的排序对象是Java中的基本数据类型,或者标准库中的数据类型(如String),自己就不用写compareTo了,Java提供了默认的compareTo实现。但是如果你的排序对象是自定义类型,就需要写compareTo。
比如你设计的一个学生类,但是两个学生之间,如何定义它们的大小关系?如果没有这个大小关系,我们就不能把学生的对象进行排序(也不能把学生的对象存储在二分搜索树或者优先队列中)。对于两个学生类的对象,创建Student这个类,计算机不能自动帮你判断两个学生对象之间如何比较。你可能希望按照学生姓名的字符串顺序定义大小关系;可能根据学生的成绩定义大小关系;也可能根据学生的身高定义大小关系,等等等等。此时,你就需要在Student类中自定义compareTo方法,来定义,你希望你的Student对象如何定义大小关系,如何确定谁在前,谁在后。
在compareTo中,当前类对象如果比传入的类对象要小(或者说排的更靠前),则返回-1;要大(或者说排的更靠后),则返回1;要相等,则返回0。
在我的课程《算法与数据结构》提供的Java代码中,包含了我们自己写的排序算法是如何利用用户传来的类对象的compareTo进行排序的。比如最简单的选择排序算法,相应的代码可以参考这里:https://github.com/liuyubobobo/Play-with-Algorithms/blob/master/02-Sorting-Basic/Course%20Code%20(Java)/02-Selection-Sort-Using-Comparable/src/bobo/algo/SelectionSort.java
加油!:)
212018-06-11
相似问题
回答 2
回答 1