JAVA內部比較器:實現Comparable接口

此接口強行對實現它的每個類的對象進行整體排序。這種排序被稱爲類的自然排序,類的 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]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章