Java中Comparable和Comparator区别小结
閱讀目錄
- 一、Comparable簡介
- 二、Comparator簡介
- 三、Comparable和Comparator區(qū)別比較
一、Comparable簡介
Comparable是排序接口。若一個類實現(xiàn)了Comparable接口,就意味著該類支持排序。實現(xiàn)了Comparable接口的類的對象的列表或數(shù)組可以通過Collections.sort或Arrays.sort進行自動排序。
此外,實現(xiàn)此接口的對象可以用作有序映射中的鍵或有序集合中的集合,無需指定比較器。該接口定義如下:
package java.lang; import java.util.*; public interface Comparable<T>{public int compareTo(T o); }
T表示可以與此對象進行比較的那些對象的類型。
此接口只有一個方法compare,比較此對象與指定對象的順序,如果該對象小于、等于或大于指定對象,則分別返回負整數(shù)、零或正整數(shù)。
現(xiàn)在我們假設(shè)一個Person類,代碼如下:
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;} }
現(xiàn)在有兩個Person類的對象,我們?nèi)绾蝸肀容^二者的大小呢?我們可以通過讓Person實現(xiàn)Comparable接口:
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;}@Overridepublic 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());}} }程序執(zhí)行結(jié)果為:
回到頂部
二、Comparator簡介
Comparator是比較接口,我們?nèi)绻枰刂颇硞€類的次序,而該類本身不支持排序(即沒有實現(xiàn)Comparable接口),那么我們就可以建立一個“該類的比較器”來進行排序,這個“比較器”只需要實現(xiàn)Comparator接口即可。也就是說,我們可以通過實現(xiàn)Comparator來新建一個比較器,然后通過這個比較器對類進行排序。該接口定義如下:
package java.util; public interface Comparator<T>{int compare(T o1, T o2);boolean equals(Object obj);}注意:1、若一個類要實現(xiàn)Comparator接口:它一定要實現(xiàn)compareTo(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”。
現(xiàn)在假如上面的Person類沒有實現(xiàn)Comparable接口,該如何比較大小呢?我們可以新建一個類,讓其實現(xiàn)Comparator接口,從而構(gòu)造一個“比較器"。
public class PersonCompartor implements Comparator<Person> {@Overridepublic int compare(Person o1, Person o2){return o1.getAge()-o2.getAge();} }現(xiàn)在我們就可以利用這個比較器來對其進行排序:
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());}} }程序運行結(jié)果為:
回到頂部
三、Comparable和Comparator區(qū)別比較
Comparable是排序接口,若一個類實現(xiàn)了Comparable接口,就意味著“該類支持排序”。而Comparator是比較器,我們?nèi)粜枰刂颇硞€類的次序,可以建立一個“該類的比較器”來進行排序。
Comparable相當于“內(nèi)部比較器”,而Comparator相當于“外部比較器”。
兩種方法各有優(yōu)劣, 用Comparable?簡單, 只要實現(xiàn)Comparable?接口的對象直接就成為一個可以比較的對象,但是需要修改源代碼。 用Comparator?的好處是不需要修改源代碼, 而是另外實現(xiàn)一個比較器, 當某個自定義的對象需要作比較的時候,把比較器和對象一起傳遞過去就可以比大小了, 并且在Comparator?里面用戶可以自己實現(xiàn)復雜的可以通用的邏輯,使其可以匹配一些比較簡單的對象,那樣就可以節(jié)省很多重復勞動了。
from:?http://www.cnblogs.com/xujian2014/p/5215082.html
總結(jié)
以上是生活随笔為你收集整理的Java中Comparable和Comparator区别小结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 虚拟化的发展历程和实现原理——图文详解
- 下一篇: Java 注解详解 (annotatio