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

(1)A1類內實現Comparable:

(1)A1類內實現Comparable:

進行排序驗證:

輸出結果:

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

進行排序驗證: 

輸出結果同上。
輸出結果同上。
②無需定義一個具體的實現類,直接new一個Comparator:

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