package interfaces;
import java.util.*;
//实例数组排序:员工数组排序
/**
@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; //若上面两句改写成这样,那输出结果就会降序排列,也不会报错,为什么不这样写呢?
}
}
问题在注释中写了
升序讲叙是完全对称的,从算法角度来说都一样,写哪个可以
sort的源码中,判断方式是下面这种方式
if(下一个对象.compareTo(前一个对象)<0){
}else{
}
也就是说只判断了后一个对象比前一个对象小情况,当小的时候就是升序,其他都是else都是降序
所以你return 0和return 1是一个效果
根据你的需要,升序用的多一些,仅此而已。
都可以。。。无所谓的吧。。。。看需求