1. 程式人生 > >Java中對兩個物件進行比較大小

Java中對兩個物件進行比較大小

在Java中要想對兩個物件進行比較大小,需要實現Comparable介面或Comparator介面。String型別的值之所以可以比較大小(漢字根據ANSI值的大小進行比較),是因為String類實現了Comparable介面。如果要比較的物件沒有實現Comparable介面或Comparator介面而直接比較會報 java.lang.ClassCastException型別轉換異常。

兩個物件進行比較方法一:實現Comparable介面

  Person類是要比較的物件

  package com.lym.comparator;

  /**

  * 人類

  * 要使該類能進行比較,該類必須實現Comparable介面

  * @author Administrator

  *

  */

  public class Person implements Comparable{

  private String name;

  private int age;

  public Person() {

  super();

  }

  public Person(String name, int age) {

  super();

  this.name = name;

  this.age = age;

  }

  public String getName() {

  return name;

  }

  public void setName(String name) {

  this.name = name;

  }

  public int getAge() {

  return age;

  }

  public void setAge(int age) {

  this.age = age;

  }

  @Override

  public String toString() {

  return "Person [name=" + name + ", age=" + age + "]";

  }

  //當前類按年齡由小到大排序

  //1和-1調換後就是按年齡由大到小排序的

  @Override

  public int compareTo(Person o) {

  if(o == null){

  throw new NullPointerException();

  }

  if(this.age>o.age){

  return 1;

  }else if(this.age<o.age){

  return 1;

  }else if(this.age=o.age){

  return 0;

  }

 }

方法二:實現Comparator介面實現Comparator介面與Comparable介面有什麼區別嗎?

答:Comparable介面 是在要比較的物件類建立的時候就實現了,也就是在專案上線之前就設計好了,大多數時候是採用這種方法。但是,有的時候專案已經上線了,此時我們還要對某個類進行比較,而此時該類還沒有實現Comparable介面,為了遵守軟體開發中“對擴充套件開放,對修改關閉”的原則,我們可以再定義一個比較器類,實現Comparator介面,這樣我們就不會破壞要比較的類的原有結構了。自定義比較器類

package com.lym.comparator;

  import java.util.Comparator;

  /**

  * 自定義比較器類

  *

  * @author Administrator

  *

  */

  public class ComparatorDemo implements Comparator {

  @Override

  public int compare(Person2 o1, Person2 o2) {

  if (o1 == null || o2 == null) {

  throw new NullPointerException();// 空指標異常

  }

  if (o1.getAge() > o2.getAge()) {

  return 1;

  } else if (o1.getAge() < o2.getAge()) {

  return -1;

  }

  return 0;

  }

  }

  Person2類package com.lym.comparator;

  /**

  * 人類

  *

  * @author Administrator

  *

  */

  public class Person2 {

  private String name;

  private int age;

  public Person2() {

  super();

  }

  public Person2(String name, int age) {

  super();

  this.name = name;

  this.age = age;

  }

  public String getName() {

  return name;

  }

  public void setName(String name) {

  this.name = name;

  }

  public int getAge() {

  return age;

  }

  public void setAge(int age) {

  this.age = age;

  }

  @Override

  public String toString() {

  return "Person2 [name=" + name + ", age=" + age + "]";

  }

  }

  物件比較器測試類package com.lym.comparator;

  import java.util.Arrays;

  /**

  * 物件比較器測試類

  * @author Administrator

  *

  */

  public class ComparableDemo {

  public static void main(String[] args) {

  String[] names = {"利亞","藤蘭","泉彩","井空","島愛","結衣"};

  Person[] persons = {

  new Person("泉彩",23),new Person("島愛",25),

  new Person("藤蘭",41),new Person("結衣",35),

  new Person("利亞",28),new Person("井空",32)

  };

  Person2[] persons2 = {

  new Person2("泉彩",23),new Person2("島愛",25),

  new Person2("藤蘭",41),new Person2("結衣",35),

  new Person2("利亞",28),new Person2("井空",32)

  };

  Arrays.sort(names);

  System.out.println(Arrays.toString(names));

  //實現Comparable介面

  Arrays.sort(persons);//按Person物件的age屬性比較大小

  System.out.println(Arrays.toString(persons));//輸出比較後的物件陣列

  //自定義比較器,實現Comparator介面

  Arrays.sort(persons2);

  System.out.println(Arrays.toString(persons2));

  }

  }