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));
}
}