面試題:請說出Comparable和 Comparator的區別?

首先可以回答,java在集合中比較對象的接口主要有兩個

Comparable 接口 : 自己和自己比較Comparator 接口: 第三方比較器,需要在排序的自己定義

下面詳細介紹上面的兩個接口:

Comparable 接口

Comparable 接口主要是用來定義排序的,用法主要為,需要排序的對象要實現這個接口,

此接口有唯一的方法。

也就是說,一個對象如果想要排序,則需要實現此接口。實現此接口的對象可以在Collections.sort 或

者 Arrays.sort 中進行排序。

T 是泛型,表示可以與此對象進行比較的對象。

為什麼需要T泛型呢??

答: 主要是加上泛型限定,在編譯階段就可以發現傳入的參數是不是需要 比較的對象,

就不需要在運行時期進行類型檢

測試結果為:

如果Person 類是第三方的jar包裡的類,且沒有實現排序功能,而且又不能去該jar裡的類。

那我們如何實現排序呢? 這時 Comparator 接口就要上場了,下面介紹 Comparator 接口。


Comparator 接口

該接口定義如下:

下面我們再次實現 Person 按照年齡排序,但此時 Person 不是先任何接口:

代碼如下:實現Person 按照年齡倒序


結果如下:


總結

Comparable自己和自己比較,需要實現Comparable 接口比較的方法: compareTo 方法在JDK 中典型的應用: TreeSet 中的排序Comparator第三方比較器比較方法: compare在JDK中的應用: Arrays.sort如果我們需要控制某個類的順序,而從類本身又不支持排序且不能對類做任何修改,這是可以用此比較器