相信大家刚开始学习Java的时候对比较器很头疼,到底什么时候是升序,什么时候是降序呢??
接下来用简短的话语最快的告诉大家:
第一组:Comparator
class AgeComparator implements Comparator<Student> {
@Overridepublic int compare (Student o1, Student o2) {
return o1.age - o2.age;}
}
第二组:Comparable
class Student implements Comparable<Student> {
public String name;public int age;public int score;//其他乱起八糟的省略不写了@Overridepublic int compareTo(Student o) {
if(this.age > o.age) {
return 1;} else if(this.age == o.age) {
return 0;} else {
return -1;}}
}
统一一下,对于Comparator来说,Student o1是第一个参数,代表放在前面,o2是第二个参数代表放在后面。
? 对于Comparable来说,this是第一个参数,代表放在前面,o是第二个参数代表放在后面。
关系统一好了之后我们现在来看:
如果返回值大于0,那么说明要进行交换
如果返回值等于0,我们不考虑,因为换不换没有区别,两个值相等
如果返回值小于0,那么说明不进行交换
先看第一组Comparator:
如果返回值是正数,那么说明o1.age > o2.age。返回值为正数,需要交换,o1是第一个位置,o2是第二个位置,且o1.age > o2.age,因此可以发现,小的被换到前面去了,是升序。
如果返回值是负数,那么说明o1.age < o2.age。反沪指为负数,不需要交换,所以小的在前面,是升序,与前面是完全符合的。
因此这么搞可以得到升序。
同理,再看第二组Comparable:
如果返回值是正数,那么说明this.age > o.age,需要交换,小的被换到前面去了,是升序。其他的判断方法和第一组完全一样。