comparator接口與Comparable接口的區(qū)別

Comparator 和 Comparable 的區(qū)別

Comparable

Comparable 定義在 Person類的內(nèi)部:

public class Persion implements Comparable {..比較Person的大小..},

因?yàn)橐呀?jīng)實(shí)現(xiàn)了比較器,那么我們的Person現(xiàn)在是一個可以比較大小的對象了,它的比較功能和String完全一樣,可以隨時隨地的拿來比較大小,因?yàn)镻erson現(xiàn)在自身就是有大小之分的。Collections.sort(personList)可以得到正確的結(jié)果。

Comparator

Comparator 是定義在Person的外部的, 此時我們的Person類的結(jié)構(gòu)不需要有任何變化,如

public class Person{ String name; int age },

然后我們另外定義一個比較器:

public PersonComparator implements Comparator() {..比較Person的大小..},

在PersonComparator里面實(shí)現(xiàn)了怎么比較兩個Person的大小. 所以,用這種方法,當(dāng)我們要對一個 personList進(jìn)行排序的時候, 我們除了了要傳遞personList過去, 還需要把PersonComparator傳遞過去,因?yàn)樵趺幢容^Person的大小是在PersonComparator里面實(shí)現(xiàn)的, 如:

Collections.sort( personList , new PersonComparator() ).

Comparator 和 Comparable 的實(shí)例

Comparable:

實(shí)現(xiàn)Comparable接口要覆蓋compareTo方法, 在compareTo方法里面實(shí)現(xiàn)比較:

public class Person implements Comparable {

String name;

int age

public int compareTo(Person another) {

int i = 0;

i = name.compareTo(another.name); // 使用字符串的比較

if(i == 0) { // 如果名字一樣,比較年齡, 返回比較年齡結(jié)果

return age - another.age;

} else {

return i; // 名字不一樣, 返回比較名字的結(jié)果.

}

}

}

這時我們可以直接用 Collections.sort( personList ) 對其排序了.

Comparator:

實(shí)現(xiàn)Comparator需要覆蓋 compare 方法:

public class Person{

String name;

int age

}

class PersonComparator implements Comparator {

public int compare(Person one, Person another) {

int i = 0;

i = one.name.compareTo(another.name); // 使用字符串的比較

if(i == 0) { // 如果名字一樣,比較年齡,返回比較年齡結(jié)果

return one.age - another.age;

} else {

return i; // 名字不一樣, 返回比較名字的結(jié)果.

}

}

}

Collections.sort( personList , new PersonComparator()) 可以對其排序

總結(jié)

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末想际,一起剝皮案震驚了整個濱河市庸推,隨后出現(xiàn)的幾起案子蒜茴,更是在濱河造成了極大的恐慌,老刑警劉巖疆栏,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曾掂,死亡現(xiàn)場離奇詭異,居然都是意外死亡承边,警方通過查閱死者的電腦和手機(jī)遭殉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門石挂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來博助,“玉大人,你說我怎么就攤上這事痹愚「辉溃” “怎么了蛔糯?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長窖式。 經(jīng)常有香客問我蚁飒,道長,這世上最難降的妖魔是什么萝喘? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任淮逻,我火速辦了婚禮,結(jié)果婚禮上阁簸,老公的妹妹穿的比我還像新娘爬早。我一直安慰自己,他們只是感情好启妹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布筛严。 她就那樣靜靜地躺著,像睡著了一般饶米。 火紅的嫁衣襯著肌膚如雪桨啃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天檬输,我揣著相機(jī)與錄音照瘾,去河邊找鬼。 笑死丧慈,一個胖子當(dāng)著我的面吹牛网杆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伊滋,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼碳却,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了笑旺?” 一聲冷哼從身側(cè)響起昼浦,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎筒主,沒想到半個月后关噪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乌妙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年使兔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片藤韵。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡虐沥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情欲险,我是刑警寧澤镐依,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站天试,受9級特大地震影響槐壳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喜每,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一务唐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧带兜,春花似錦绍哎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涩咖,卻和暖如春海诲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背檩互。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工特幔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人闸昨。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓蚯斯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饵较。 傳聞我的和親對象是個殘疾皇子拍嵌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法循诉,內(nèi)部類的語法横辆,繼承相關(guān)的語法,異常的語法茄猫,線程的語...
    子非魚_t_閱讀 31,622評論 18 399
  • 項(xiàng)目中經(jīng)常會遇到列表搜索查詢狈蚤,大部分的查詢是可以通過sql語句來實(shí)現(xiàn)的,有些特殊的搜索排序sql則實(shí)現(xiàn)不了划纽,例如中...
    信徒_allen閱讀 2,584評論 0 1
  • 相同 Comparable和Comparator都是用來實(shí)現(xiàn)對象的比較脆侮、排序 要想對象比較、排序勇劣,都需要實(shí)現(xiàn)Com...
    Jeffbond閱讀 6,236評論 3 20
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)靖避。 張土汪:刷leetcod...
    土汪閱讀 12,743評論 0 33
  • 溫柔的慈悲 —— 姑娘本無好壞,悲喜不為人知 剛過八點(diǎn)的樣子,急匆匆地走向教室筋蓖。昨晚剛下過...
    碧小川閱讀 1,047評論 2 6