Comparable接口
一個類實現(xiàn)comparable接口意味著它支持排序逛薇,也就可以用Collections.sort或Arrays.sort進行排序
接口定義如下:
package java.lang;
import java.util.*;
public interface Comparable<T>
{
public int compareTo(T o);
}
比較此對象與指定對象的順序愉阎,如果該對象小于产禾、等于或大于指定對象迈螟,則分別返回負整數(shù)贪嫂、零或正整數(shù)胞皱。
使用:
public class Person implements Comparable<Person>
{
String name;
int age;
public Person(String name, int age)
{
super();
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
//////////////////////////////////////////////////////////
@Override
public int compareTo(Person p)
{
return this.age-p.getAge();
}
/////////////////////////////////////////////////////////////
public static void main(String[] args)
{
Person[] people=new Person[]{new Person("xujian", 20),new Person("xiewei", 10)};
System.out.println("排序前");
for (Person person : people)
{
System.out.print(person.getName()+":"+person.getAge());
}
///////////////////////////////////////////////////////////////////////////
Arrays.sort(people);
//////////////////////////////////////////////////////////////////////////
System.out.println("\n排序后");
for (Person person : people)
{
System.out.print(person.getName()+":"+person.getAge());
}
}
}
Comparator接口
這個接口定義如下:
package java.util;
public interface Comparator<T>
{
int compare(T o1, T o2);
boolean equals(Object obj);
}
作用是給一個沒有實現(xiàn)comparable接口的類進行排序舌界。
注意:
1赋元、若一個類要實現(xiàn)Comparator接口:它一定要實現(xiàn)compare(T o1, T o2) 函數(shù)忘蟹,但可以不實現(xiàn) equals(Object obj) 函數(shù)。
2搁凸、int compare(T o1, T o2) 是“比較o1和o2的大小”媚值。返回“負數(shù)”,意味著“o1比o2小”护糖;返回“零”褥芒,意味著“o1等于o2”;返回“正數(shù)”嫡良,意味著“o1大于o2”锰扶。
使用:
public class PersonCompartor implements Comparator<Person>
{
@Override
public int compare(Person o1, Person o2)
{
return o1.getAge()-o2.getAge();
}
}
public class Person
{
String name;
int age;
public Person(String name, int age)
{
super();
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public static void main(String[] args)
{
Person[] people=new Person[]{new Person("xujian", 20),new Person("xiewei", 10)};
System.out.println("排序前");
for (Person person : people)
{
System.out.print(person.getName()+":"+person.getAge());
}
////////////////////////////////////////////////////////////////////////////
Arrays.sort(people,new PersonCompartor());
////////////////////////////////////////////////////////////////////////////
System.out.println("\n排序后");
for (Person person : people)
{
System.out.print(person.getName()+":"+person.getAge());
}
}
}
Comparable和Comparator比較
Comparable是排序接口献酗,若一個類實現(xiàn)了Comparable接口,就意味著“該類支持排序”少辣。而Comparator是比較器凌摄,我們?nèi)粜枰刂颇硞€類的次序,可以建立一個“該類的比較器”來進行排序漓帅。
Comparable相當于“內(nèi)部比較器”锨亏,而Comparator相當于“外部比較器”。
用Comparable 簡單忙干, 只要實現(xiàn)Comparable 接口的對象直接就成為一個可以比較的對象器予,但是需要修改源代碼。 用Comparator 的好處是不需要修改源代碼捐迫, 而是另外實現(xiàn)一個比較器乾翔, 當某個自定義的對象需要作比較的時候,把比較器和對象一起傳遞過去就可以比大小了.
在Comparator 里面用戶可以自己實現(xiàn)復(fù)雜的可以通用的邏輯施戴,使其可以匹配一些比較簡單的對象反浓,那樣就可以節(jié)省很多重復(fù)勞動了。