public interface Comparable<T>
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。
实现此接口的对象列表(和数组)可以通过 Collections.sort
(和 Arrays.sort
)进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
Arrays.sort(staff);
方法摘要 | |
---|---|
int |
compareTo(T o) 比较此对象与指定对象的顺序。 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
|
package ComparableTest;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Random;
public class EmployeeSortTest {
public static void main(String[] args) {
Employee[] staff = new Employee[3];
staff[0] = new Employee("lee",123);
staff[1] = new Employee("mary",43);
staff[2] = new Employee("tom",54231);
System.out.println("排序前:");
for(Employee e:staff) {
System.out.println("id="+e.getId()+" name="+e.getName()+" salary="+e.getSalary());
}
System.out.println("排序后");
Arrays.sort(staff);//sort方法可以实现对对象数组排序,但必须实现Comparable接口
for(Employee e:staff) {
System.out.println("id="+e.getId()+" name="+e.getName()+" salary="+e.getSalary());
}
}
}
/*
* 因为要实现对Employee对象的排序,所以在Employee类中要实现Employee接口
* 也就是要实现compareTo()方法。
* */
class Employee implements Comparable<Employee> {
String name;
double salary;
int id;
public Employee(String name,double s) {
this.name = name;
this.salary = s;
Random ID = new Random();
id = ID.nextInt(1000000);
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public int getId() {
return id;
}
public void raiseSalary(double byPercent) {
double raise = salary*byPercent/100;
salary += raise;
}
@Override
public int compareTo(Employee o) {
if(id<o.id) {
return -1;
}
if(id>o.id) {
return 1;
}
return 0;
}
}
来源:oschina
链接:https://my.oschina.net/u/1265921/blog/201302