Java中Comparable與Comparator的區(qū)別


相同

  • Comparable和Comparator都是用來實現(xiàn)對象的比較、排序
  • 要想對象比較、排序,都需要實現(xiàn)Comparable或Comparator接口
  • Comparable和Comparator都是Java的接口

區(qū)別

  • Comparator位于java.util包下,而Comparable位于java.lang包下
  • Comparable接口的實現(xiàn)是在類的內(nèi)部(如 String、Integer已經(jīng)實現(xiàn)了Comparable接口,自己就可以完成比較大小操作),Comparator接口的實現(xiàn)是在類的外部(可以理解為一個是自已完成比較,一個是外部程序?qū)崿F(xiàn)比較)
  • 實現(xiàn)Comparable接口要重寫compareTo方法, 在compareTo方法里面實現(xiàn)比較
public class Student implements Comparable {
     String name;
     int age
     public int compareTo(Student another) {
          int i = 0;
          i = name.compareTo(another.name); 
          if(i == 0) { 
               return age - another.age;
          } else {
               return i; 
          }
     }
}
   這時我們可以直接用 Collections.sort( StudentList ) 對其排序了.(
   **只需傳入要排序的列表**)
  • 實現(xiàn)Comparator需要重寫 compare 方法
public class Student{
     String name;
     int age
}
class StudentComparator implements Comparator { 
     public int compare(Student one, Student another) {
          int i = 0;
          i = one.name.compareTo(another.name); 
          if(i == 0) { 
               return one.age - another.age;
          } else {
               return i;          }
     }
}
   Collections.sort( StudentList , new StudentComparator()) 可以對其排序(
   **不僅要傳入待排序的列表,還要傳入實現(xiàn)了Comparator的類的對象**)

總結(jié)

  • 如果比較的方法只要用在一個類中,用該類實現(xiàn)Comparable接口就可以。
  • 如果比較的方法在很多類中需要用到,就自己寫個類實現(xiàn)Comparator接口,這樣當(dāng)要比較的時候把實現(xiàn)了Comparator接口的類傳過去就可以,省得重復(fù)造輪子。這也是為什么Comparator會在java.util包下的原因。
    使用Comparator的優(yōu)點是:1.與實體類分離 2.方便應(yīng)對多變的排序規(guī)則

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,623評論 18 399
  • 項目中經(jīng)常會遇到列表搜索查詢,大部分的查詢是可以通過sql語句來實現(xiàn)的,有些特殊的搜索排序sql則實現(xiàn)不了,例如中...
    信徒_allen閱讀 2,708評論 0 1
  • 面向?qū)ο笾饕槍γ嫦蜻^程。 面向過程的基本單元是函數(shù)。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,217評論 0 4
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,419評論 0 2
  • 咖啡是用經(jīng)過烘焙的咖啡豆制作出來的飲料,與可可、茶同為流行于世界的主要飲品。 咖啡樹是屬茜草科常綠小喬木,日常飲用...
    二喜她媽閱讀 432評論 0 0

友情鏈接更多精彩內(nèi)容