日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中Comparable和Comparator区别小结

發布時間:2025/3/21 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中Comparable和Comparator区别小结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

閱讀目錄

  • 一、Comparable簡介
  • 二、Comparator簡介
  • 三、Comparable和Comparator區別比較
回到頂部

一、Comparable簡介

  Comparable是排序接口。若一個類實現了Comparable接口,就意味著該類支持排序。實現了Comparable接口的類的對象的列表或數組可以通過Collections.sort或Arrays.sort進行自動排序。

  此外,實現此接口的對象可以用作有序映射中的鍵或有序集合中的集合,無需指定比較器。該接口定義如下:

package java.lang; import java.util.*; public interface Comparable<T>
{
public int compareTo(T o); }

  T表示可以與此對象進行比較的那些對象的類型。

  此接口只有一個方法compare,比較此對象與指定對象的順序,如果該對象小于、等于或大于指定對象,則分別返回負整數、零或正整數。

  現在我們假設一個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;} }

  現在有兩個Person類的對象,我們如何來比較二者的大小呢?我們可以通過讓Person實現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());}} }

  程序執行結果為:

  

回到頂部

二、Comparator簡介

  Comparator是比較接口,我們如果需要控制某個類的次序,而該類本身不支持排序(即沒有實現Comparable接口),那么我們就可以建立一個“該類的比較器”來進行排序,這個“比較器”只需要實現Comparator接口即可。也就是說,我們可以通過實現Comparator來新建一個比較器,然后通過這個比較器對類進行排序。該接口定義如下:

package java.util; public interface Comparator<T>{int compare(T o1, T o2);boolean equals(Object obj);}

注意:1、若一個類要實現Comparator接口:它一定要實現compareTo(T o1, T o2) 函數,但可以不實現 equals(Object obj) 函數。

   2、int compare(T o1, T o2) 是“比較o1和o2的大小”。返回“負數”,意味著“o1比o2小”;返回“零”,意味著“o1等于o2”;返回“正數”,意味著“o1大于o2”。

  現在假如上面的Person類沒有實現Comparable接口,該如何比較大小呢?我們可以新建一個類,讓其實現Comparator接口,從而構造一個“比較器"。

public class PersonCompartor implements Comparator<Person> {@Overridepublic 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是排序接口,若一個類實現了Comparable接口,就意味著“該類支持排序”。而Comparator是比較器,我們若需要控制某個類的次序,可以建立一個“該類的比較器”來進行排序。

  Comparable相當于“內部比較器”,而Comparator相當于“外部比較器”。

  兩種方法各有優劣, 用Comparable?簡單, 只要實現Comparable?接口的對象直接就成為一個可以比較的對象,但是需要修改源代碼。 用Comparator?的好處是不需要修改源代碼, 而是另外實現一個比較器, 當某個自定義的對象需要作比較的時候,把比較器和對象一起傳遞過去就可以比大小了, 并且在Comparator?里面用戶可以自己實現復雜的可以通用的邏輯,使其可以匹配一些比較簡單的對象,那樣就可以節省很多重復勞動了。


from:?http://www.cnblogs.com/xujian2014/p/5215082.html

總結

以上是生活随笔為你收集整理的Java中Comparable和Comparator区别小结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。