javacomparable
Ⅰ java 中的 Comparable 與 Comparator 介面使用詳解
本文主要介紹Java中的Comparable與Comparator介面的使用場景及使用方法。
要使類的對象支持排序,類需要實現Comparable介面。若一個類未實現Comparable介面,則在使用Arrays.sort()或Collections.sort()對對象集合進行排序時會拋出ClassCastException。實現Comparable介面的類中的compareTo()方法用於比較當前對象與指定對象的先後順序,返回值可以是正整數、0或負整數,分別表示當前對象大於、等於、小於指定對象。
實現compareTo()方法必須滿足幾個通用約定,即返回值的符號函數sgn(表達式)為1、0、-1時分別表示表達式為正數、0、負數。例如,自定義一個類Telephone,並實現Comparable介面,compareTo()方法通過使用Integer、String、Integer的compare方法依次對countryCode、areaCode和number進行比較。
為了驗證實現效果,編寫單元測試用例ComparableTest,准備一個Telephone對象數組,使用Arrays.sort()進行排序,列印結果,結果與compareTo()方法中編寫的排序規則一致。
實現Comparable介面表示擁有了一種默認的排序方式,但若想在不修改類本身的情況下使用多種排序規則,這時可以使用Comparator介面。Comparator介面定義了一個compare()方法,實現其compare()方法必須滿足與實現Comparable.compareTo()方法完全相同的一組通用約定。
使用Comparator介面時,對應的類無須實現任何介面,因此Telephone可以是一個普通的POJO類。編寫單元測試用例ComparatorTest,同樣准備一個Telephone對象數組,使用Arrays.sort()進行排序,這次需要傳入一個Comparator介面的實現來指定排序規則,例如依次使用countryCode、areaCode和number進行倒序排序。最後列印排序後的數組,結果滿足預期。
Comparable介面位於java.lang包下,Comparator介面位於java.util下。Comparable介面是一個Java語言基礎介面,而Comparator介面更像是一個工具類,用於在不修改類本身的情況下進行按需排序。
總結,Comparable介面用於提供默認的排序方式,而Comparator介面用於在不修改類本身的情況下實現多種排序規則。實現Comparable介面表示類支持默認的排序功能,而使用Comparator介面可以靈活地應用多種排序邏輯。本文完整示例代碼已提交至本人GitHub,歡迎關注或Fork。