此接口強行對實現它的每個類的對象進行整體排序。這種排序被稱爲類的自然排序,類的 compareTo 方法被稱爲它的自然比較方法,比較此對象與指定對象的順序。如果該對象小於、等於或大於指定對象,則分別返回負整數、零或正整數。可以稱作是一個內部比較器。
看一個例子:
// 定義一個學生類:
package comparabletest;
/**
* @author Administrator 定義一個學生類實現Comparable接口
*/
public class Student implements Comparable<Student> {
private int score;
private int age;
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student(int score, int age) {
this.score = score;
this.age = age;
}
@Override
public int compareTo(Student arg0) {
Student s = (Student) arg0;
if (this.score < s.getScore()) {
return -1; // 自身對象值小於比較對象值,返回-1.按升序排列
} else if (this.score > s.getScore()) {
return 1; // 自身對象值大於比較對象值,返回1.按升序排列
} else {
if (this.age > s.getAge()) {
return -1; // 自身對象值大於比較對象值,返回-1.按降序排列
} else if (this.age < s.getAge()) {
return 1; // 自身對象值小於比較對象值,返回1.按降序排列
} else {
return 0; // 自身對象值等於比較對象值,返回0.
}
}
}
@Override
public String toString() {
return "Student [score=" + score + ", age=" + age + "]";
}
}
// 測試代碼,將學生信息排序
package comparabletest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class StudentCompare {
public static void main(String[] args) {
// 定義一個長度爲4的數組
Student[] students = { new Student(100, 20), new Student(95, 21),
new Student(93, 22), new Student(95, 24) };
// 按分數升序,按年齡降序排列
java.util.Arrays.sort(students);
for (int i = 0; i < students.length; i++) {
System.out.println(students[i]);
}
System.out.println("------");
// 定義一個長度爲4的列表
List<Student> studentsList = new ArrayList<Student>();
studentsList.add(new Student(100, 30));
studentsList.add(new Student(99, 40));
studentsList.add(new Student(98, 50));
studentsList.add(new Student(99, 42));
// 按分數升序,按年齡降序排列
Collections.sort(studentsList);
for (Student s : studentsList) {
System.out.println(s);
}
}
}
輸出結果:
Student [score=93, age=22]
Student [score=95, age=24]
Student [score=95, age=21]
Student [score=100, age=20]
------
Student [score=98, age=50]
Student [score=99, age=42]
Student [score=99, age=40]
Student [score=100, age=30]