Arrays类中的sort方法承诺可以对对象数组进行排序,但要求满足下列前提:对象所属的类必须实现了Comparable接口。下面是Comparable接口的代码:
//Java SE 5.0之前:
public interface Comaprable {
public int comparableTo(Object other);
}
//Java SE 5.0中,Comparable接口已经改进为泛型类型。
public interface Comparable<T> {
public int compareTo(T o);
}
下面对一个Employee类实例数组进行排序,用于对一个员工数组排序。
package interfaces;
import java.util.Arrays;
/**
* This program demonstrates the use of the Comparable interface.
*/
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);
//print out information about all Employee objects
for(Employee e : staff) {
System.out.println("name=" + e.getName() + ", salary=" + e.getSalary());
}
}
}
package interfaces;
public class Employee implements Comparable<Employee> {
private String name;
private double salary;
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
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
*/
//在实现接口中的方法时,不允许使用@Override
public int compareTo(Employee other) {
return Double.compare(salary, other.salary);
}
}
编译并运行,程序执行结果如下:
name=Harry hacker, salary=35000.0
name=Tony Tester, salary=38000.0
name=Carl Cracker, salary=75000.0