考慮實(shí)現(xiàn)Comparable接口

第十二條: 考慮實(shí)現(xiàn)Comparable接口

(注意本文不適合學(xué)習(xí)京髓,純屬個人筆記)


1. Comparable接口介紹

一個類,如果實(shí)現(xiàn)了Comparable接口宜猜,我們可以很容易的將它在數(shù)組或是集合中進(jìn)行排序。so。横朋。。Comparable這個接口是用來實(shí)現(xiàn)對象排序的百拓。
假設(shè)有這么一個類:

public class CompObj implements Comparable<CompObj> {
  private int age;
  private String name;
  public CompObj(int age, String name) {
    this.age = age;
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public String getName() {
    return name;
  }

  //重點(diǎn)在這琴锭,這是接口中唯一的一個方法
  @Override
  public int compareTo(@NonNull CompObj another) {
    return this.age - another.age;
  }
}

然后我們可以這樣對他進(jìn)行排序:

List<CompObj> list = ...;//初始化一個list
Collections.sort(list); //集合排序,就是這么簡單
CompObj array[] = ...;//初始化一個數(shù)組
Arrays.sort(list)衙传; //數(shù)組排序决帖,就是這么簡單

現(xiàn)在對comparaTo()方法進(jìn)行簡單說明。
comparaTo()方法傳入該類的另外一個實(shí)例蓖捶,返回一個int值地回,這個方法每執(zhí)行一次都是對傳入的對象和和本生對象進(jìn)行比較。返回的int值如果是一個正值(不包括零)則在數(shù)組或是集合中交換兩個實(shí)例的位置俊鱼,否則位置保持不變刻像。

2. 為什么要考慮實(shí)現(xiàn)Comparable接口

實(shí)現(xiàn)了Comparable接口的類,可以很好的和集合類或是一些泛型算法很好的協(xié)作并闲,你可以付出很小的代價實(shí)現(xiàn)強(qiáng)大的功能细睡。

3. 什么時候應(yīng)該考慮是想Comparable接口

(1)你寫的類是一個值類(前面的文章介紹過)。

(2)類中有很明顯的內(nèi)在排序關(guān)系帝火,如字母排序溜徙、按數(shù)值順序或是時間等洒宝。

(3)前面兩者是并且關(guān)系。

4. 如何很好的實(shí)現(xiàn)Comparable接口

(1)滿足對稱性萌京。
即對象A.comparaTo(B) 大于0的話雁歌,則B.comparaTo(A)必須小于0;

(2)滿足傳遞性。
即對象A.comparaTo(B) 大于0知残,對象B.comparaTo(Z)大于0靠瞎,則對象A.comparaTo(Z)一定要大于0;

(3)建議comparaTo方法和equals()方法保持一致求妹。
即對象A.comparaTo(B)等于0乏盐,則建議A.equals(B)等于true。

(4)對于實(shí)現(xiàn)了Comparable接口的類制恍,盡量不要繼承它父能,而是采取復(fù)合的方式。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末净神,一起剝皮案震驚了整個濱河市何吝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鹃唯,老刑警劉巖爱榕,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異坡慌,居然都是意外死亡黔酥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門洪橘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跪者,“玉大人,你說我怎么就攤上這事熄求≡幔” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵抡四,是天一觀的道長柜蜈。 經(jīng)常有香客問我,道長指巡,這世上最難降的妖魔是什么淑履? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮藻雪,結(jié)果婚禮上秘噪,老公的妹妹穿的比我還像新娘。我一直安慰自己勉耀,他們只是感情好指煎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布蹋偏。 她就那樣靜靜地躺著,像睡著了一般至壤。 火紅的嫁衣襯著肌膚如雪威始。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天像街,我揣著相機(jī)與錄音黎棠,去河邊找鬼。 笑死镰绎,一個胖子當(dāng)著我的面吹牛脓斩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播畴栖,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼随静,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吗讶?” 一聲冷哼從身側(cè)響起燎猛,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎关翎,沒想到半個月后扛门,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纵寝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了星立。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爽茴。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖绰垂,靈堂內(nèi)的尸體忽然破棺而出室奏,到底是詐尸還是另有隱情,我是刑警寧澤劲装,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布胧沫,位于F島的核電站,受9級特大地震影響占业,放射性物質(zhì)發(fā)生泄漏绒怨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一谦疾、第九天 我趴在偏房一處隱蔽的房頂上張望南蹂。 院中可真熱鬧,春花似錦念恍、人聲如沸六剥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疗疟。三九已至该默,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間策彤,已是汗流浹背权均。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锅锨,地道東北人叽赊。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像必搞,于是被迫代替她去往敵國和親必指。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • compareTo方法并沒有在Object中聲明恕洲。相反塔橡,它是Comparable接口中唯一的一個方法。compar...
    郭_4d5f閱讀 740評論 0 1
  • 什么是Comparable接口霜第? Comparable接口一般用于表示某個實(shí)例具有內(nèi)在的排序關(guān)系葛家。 為什么需要實(shí)現(xiàn)...
    大海孤了島閱讀 1,925評論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法泌类,內(nèi)部類的語法癞谒,繼承相關(guān)的語法,異常的語法刃榨,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 從三月份找實(shí)習(xí)到現(xiàn)在弹砚,面了一些公司,掛了不少枢希,但最終還是拿到小米桌吃、百度、阿里苞轿、京東茅诱、新浪、CVTE搬卒、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,209評論 11 349
  • 摘自http://www.zhangxinxu.com/wordpress/2011/10/js%E7%AE%97...
    kabem閱讀 204評論 0 0