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

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

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

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

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

Comparable 接口

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

此接口有唯一的方法。

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

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

者 Arrays.sort 中進行排序。

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

為什麼需要T泛型呢??

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

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

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

測試結果為:

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

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

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


Comparator 接口

該接口定義如下:

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

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


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

結果如下:


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

總結

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


分享到:


相關文章: