更新時(shí)間:2019-09-04 10:14:11 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1953次
Comparable和Comparator是JavaCoreAPI提供的兩個(gè)接口。從它們的名字,我們可以告訴他們可能用于以某種方式比較東西。但究竟是什么,它們之間有什么區(qū)別?以下是回答此問(wèn)題的兩個(gè)示例。這些簡(jiǎn)單的例子比較了兩個(gè)HDTV的尺寸。閱讀代碼后,如何使用ComparablevsComparator是顯而易見(jiàn)的。
1.Comparable
Comparable由類實(shí)現(xiàn),以便能夠?qū)⒆陨淼膶?duì)象與其他一些對(duì)象進(jìn)行比較。類本身必須實(shí)現(xiàn)接口才能比較其實(shí)例。實(shí)現(xiàn)所需的方法是compareTo。這是一個(gè)例子:
輸出:索尼更好。
2.Comparator
在某些情況下,你可能不希望更改類并使其具有可比性。在這種情況下,Comparator如果要基于某些屬性/字段比較對(duì)象,則可以使用。例如,可以根據(jù)“高度”或“年齡”等對(duì)2個(gè)人進(jìn)行比較(使用可比較的方法無(wú)法做到這一點(diǎn)。)
實(shí)現(xiàn)所需的方法是compare。現(xiàn)在讓我們用另一種方法來(lái)比較這些電視的大小。一種常見(jiàn)的用途Comparator是分類。bothCollections和Arraysclasses都提供了一個(gè)使用a的排序方法Comparator。
輸出:
松下三星索尼
通常我們可以使用Collections.reverseOrder方法來(lái)獲得降序比較。如下:
輸出:
[3,1,2][1,2,3][3,2,1]
3.何時(shí)使用哪個(gè)接口?
簡(jiǎn)而言之,實(shí)現(xiàn)Comparable的類將具有可比性,這意味著它可以相互比較實(shí)例。
實(shí)現(xiàn)Comparator的類將主要用于兩種情況:1)它可以傳遞給排序方法,例如Collections.sort或Arrays.sort,以允許精確控制排序順序和2)它還可以用于控制某些數(shù)據(jù)的順序結(jié)構(gòu),例如有序集(例如TreeSet)或有序映射(例如TreeMap)。
例如,創(chuàng)建一個(gè)TreeSet。我們可以將構(gòu)造函數(shù)傳遞給比較器,也可以使對(duì)象類具有可比性。
方法1-TreeSet
方法2-Comparable
這篇文章到這里就結(jié)束了,大家對(duì)本次知識(shí)點(diǎn)是否理解了呢?如果有疑問(wèn)可以登錄“動(dòng)力節(jié)點(diǎn)IT培訓(xùn)官網(wǎng)”咨詢?cè)诰€客服老師哦。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)