天天看點

JAVA比較器:Comparable<T>和Comparator

項目開發中,當我們遇到對象級别的數組或集合的排序或去重往往就會使用到比較器,java的比較器有兩種:Comparable和Comparator。

1).Comparable的使用

使用comparable時在被比較對象所在類上直接去實作Comparable接口就可以了,泛型寫類本身,此接口中隻定義了一個抽象方法,使用者使用此方法隻需要傳回3種結果:-1,0,1即可,如下圖所示。

JAVA比較器:Comparable<T>和Comparator

輸出結果為升序排列:

JAVA比較器:Comparable<T>和Comparator

2).Comparator的使用

當一個類寫完後沒有實作Comparable接口卻需要實作對象比較接口時可以使用比較器(Comparator),此接口不同于Comparable在java.lang中而是在java.util中,是一個功能型接口,實作時需要覆寫其compare(T o1,T o2)方法。

JAVA比較器:Comparable<T>和Comparator

本次範例使用了Lamda表達式通過Comparator接口完成了對象比較操作。

輸出結果降序排列:

JAVA比較器:Comparable<T>和Comparator

兩個比較器的差別:

·java.lang.Comparable接口實在一個類定義時實作好的接口,這樣本類的對象數組就可以通過Arrays.sort()方法進行排序,在此接口下定義了一個compareTo()方法。

·java.util.Comparator是專門定義一個指定類的比較規則,屬于挽救的比較操作,裡面有兩個抽象方法:public int compare()、public boolean equals()。