Comparator與Comparable的區(qū)別?
相同點:都是用于比較,排序的接口。例如對于List對象,如果存儲的對象類型不是自定義的,像String那樣已經(jīng)實現(xiàn)了Comparable接口,可以直接Collections.sort(Stringlistname),就可以排出序來了。而對于自定義的對象類型,就需要我們自己去實現(xiàn)Comparator或者Comparable接口。
不同點:Comparable是在自定義類的內(nèi)部實現(xiàn)的,在類聲明的地方加上implements Comparable,然后在其內(nèi)部實現(xiàn)compare方法。Comparator是在自定義類的外部自定義一個比較類,這個比較類要實現(xiàn)Comparator接口,實現(xiàn)compare方法。也可以不具體定義一個比較類,直接在Comparator的內(nèi)部將compare方法實現(xiàn)就可以了。總之就是要自己實現(xiàn)一個比較器。
下面通過代碼直觀的說明:
自定義類為A1:

(1)A1類內(nèi)實現(xiàn)Comparable:

(1)A1類內(nèi)實現(xiàn)Comparable:

進行排序驗證:

輸出結(jié)果:

(2)A1類外實現(xiàn)Comparator:
①定義一個具體的類實現(xiàn)Comparator:

進行排序驗證: 

輸出結(jié)果同上。
輸出結(jié)果同上。
②無需定義一個具體的實現(xiàn)類,直接new一個Comparator:

輸出結(jié)果同上。
綜合:兩種方法各有優(yōu)劣,實現(xiàn)Comparable的方法,一勞永逸,但是需要修改自定義類的源代碼。Comparator不需要修改源代碼,但是需要在使用的地方對Comparator進行實現(xiàn)。
原文 :www.hzlxwx.com
原文 :www.hzlxwx.com