重写 compareTo后,ArrayList.sort可以升序排列,为什么一般不改成降序呢 ?

package interfaces;
import java.util.*;
//实例数组排序:员工数组排序
/**

  • This program demonstrates the use of the Comparable interface.
  • @version 1.30 2004-02-27
  • @author Cay Horstmann
    */
    public class EmployeeSortTest
    {
    public static void main(String[] args)
    {
    Employee[] staff = new Employee[3];

    staff[0] = new Employee("Harry Hacker", 35000);
    staff[1] = new Employee("Carl Cracker", 75000);
    staff[2] = new Employee("Tony Tester", 38000);

    Arrays.sort(staff);//结合重写后的compareTo方法,将类按照工资高低升序排列

    // print out information about all Employee objects
    for (Employee e : staff)
    System.out.println("name=" + e.getName() + ",salary=" + e.getSalary());
    }
    }

class Employee implements Comparable
{
private String name;
private double salary;

public Employee(String n, double s) {
    name = n;
    salary = s;
}

public String getName()
{
return name;
}

public double getSalary()
{
return salary;
}

public void raiseSalary(double byPercent)
{
double raise = salary * byPercent / 100;
salary += raise;
}

/**
* Compares employees by salary
* @param other another Employee object
* @return a negative value if this employee has a lower salary than
* otherObject, 0 if the salaries are the same, a positive value otherwise
*/
public int compareTo(Employee other)
{
if (salary < other.salary) return -1;//if (salary < other.salary) return -1;
if (salary > other.salary) return 1;//if (salary > other.salary) return 1;
return 0; //若上面两句改写成这样,那输出结果就会降序排列,也不会报错,为什么不这样写呢?
}

}

问题在注释中写了

4个回答

sort的源码中,判断方式是下面这种方式
if(下一个对象.compareTo(前一个对象)<0){
}else{
}
也就是说只判断了后一个对象比前一个对象小情况,当小的时候就是升序,其他都是else都是降序

所以你return 0和return 1是一个效果

fzhmoive
fzhmoive 这个回答靠谱,解惑了
接近 5 年之前 回复

升序讲叙是完全对称的,从算法角度来说都一样,写哪个可以

根据你的需要,升序用的多一些,仅此而已。

都可以。。。无所谓的吧。。。。看需求

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问