JAVA自定義比較器Comparator 和 Comparable

JAVA有兩種比較器恤批,分別是:Comparator 和 Comparable

我看網(wǎng)上說Comporable是內(nèi)部比較器欧啤,而Comparator是外部比較器霹菊,由于這兩個(gè)都是接口状婶,所以都需要去實(shí)現(xiàn)鸭巴,而實(shí)現(xiàn)Comporable接口則需要實(shí)現(xiàn)compareTo方法,實(shí)現(xiàn)Comparator需要實(shí)現(xiàn)compare方法巡通。Comparable接口一般由要比較的類實(shí)現(xiàn)尘执,所以叫內(nèi)部比較器,而comparator比較器一般是單獨(dú)實(shí)現(xiàn)扁达,或者匿名內(nèi)部類實(shí)現(xiàn)正卧。

例如:

public class Person implements Comparable<Person> {

int age;

public Person(int age) {

this.age = age;

}

@Override

public int compareTo(Person person) {

// TODO Auto-generated method stub

return this.age - person.age;

}

}

測試代碼:

public class TestComparator {

public static void main(String[] args) {

List<Person> list = new ArrayList<>();

list.add(new Person(12));

list.add(new Person(9));

list.add(new Person(10));

list.add(new Person(22));

System.out.println("排序前:");

for (int i = 0; i < list.size(); i++) {

System.out.print(list.get(i).age + "? ");

}

System.out.println("排序后:");

Collections.sort(list);

for (int i = 0; i < list.size(); i++) {

System.out.print(list.get(i).age + "? ");

}

}

}

運(yùn)行結(jié)果:

排序前:

12? 9? 10? 22?

排序后:

9? 10? 12? 22?

自定義比較器:

public class myComparator implements Comparator<Person> {

@Override

public int compare(Person p1, Person p2) {

// TODO Auto-generated method stub

return p2.age - p1.age;

}

}

然后在比較的時(shí)候把它給傳過去:

//接上面的測試方法

System.out.println("\n" + "使用自定義比較器排序后:");

Collections.sort(list, new myComparator());

for (int i = 0; i < list.size(); i++) {

System.out.print(list.get(i).age + "? ");

}

運(yùn)行結(jié)果如下:

排序前:

12? 9? 10? 22?

排序后:

9? 10? 12? 22?

使用自定義比較器排序后:

22? 12? 10? 9?

綜上,兩者的區(qū)別是實(shí)現(xiàn)Comparator接口代碼更加靈活跪解,可以定義某個(gè)類的多個(gè)比較器炉旷,從而在排序時(shí)根據(jù)實(shí)際場景自由調(diào)用,而Comparable接口實(shí)現(xiàn)后便不能改動(dòng)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末叉讥,一起剝皮案震驚了整個(gè)濱河市窘行,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌图仓,老刑警劉巖罐盔,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異救崔,居然都是意外死亡惶看,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門六孵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纬黎,“玉大人,你說我怎么就攤上這事劫窒”窘瘢” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵主巍,是天一觀的道長冠息。 經(jīng)常有香客問我,道長孕索,這世上最難降的妖魔是什么逛艰? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮搞旭,結(jié)果婚禮上散怖,老公的妹妹穿的比我還像新娘唐断。我一直安慰自己,他們只是感情好杭抠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著恳啥,像睡著了一般偏灿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钝的,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天翁垂,我揣著相機(jī)與錄音,去河邊找鬼硝桩。 笑死沿猜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的碗脊。 我是一名探鬼主播啼肩,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼衙伶!你這毒婦竟也來了祈坠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤矢劲,失蹤者是張志新(化名)和其女友劉穎赦拘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芬沉,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡躺同,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丸逸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹋艺。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖椭员,靈堂內(nèi)的尸體忽然破棺而出车海,到底是詐尸還是另有隱情,我是刑警寧澤隘击,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布侍芝,位于F島的核電站,受9級(jí)特大地震影響埋同,放射性物質(zhì)發(fā)生泄漏州叠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一凶赁、第九天 我趴在偏房一處隱蔽的房頂上張望咧栗。 院中可真熱鬧逆甜,春花似錦、人聲如沸致板。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斟或。三九已至素征,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間萝挤,已是汗流浹背御毅。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怜珍,地道東北人端蛆。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像酥泛,于是被迫代替她去往敵國和親今豆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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

  • 項(xiàng)目中經(jīng)常會(huì)遇到列表搜索查詢柔袁,大部分的查詢是可以通過sql語句來實(shí)現(xiàn)的晚凿,有些特殊的搜索排序sql則實(shí)現(xiàn)不了,例如中...
    信徒_allen閱讀 2,587評(píng)論 0 1
  • Comparable 簡介 Comparable 是排序接口瘦馍。 若一個(gè)類實(shí)現(xiàn)了Comparable接口歼秽,就意味著“...
    03ca2835cf70閱讀 190評(píng)論 0 0
  • 【程序1】 題目:古典問題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子情组,小兔子長到第三個(gè)月后每個(gè)月又生一對(duì)兔...
    開心的鑼鼓閱讀 3,320評(píng)論 0 9
  • 一院崇、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對(duì)于byte類型而言...
    龍貓小爺閱讀 4,261評(píng)論 0 16
  • 泛型 對(duì)象和實(shí)例是一個(gè)意思肆氓,類與對(duì)象的關(guān)系就像數(shù)據(jù)類型和變量一樣。 泛型的主要目的之一就是用來指定類(如:容器)要...
    yueyue_projects閱讀 576評(píng)論 0 0