更新時間:2020-09-21 17:13:13 來源:動力節點 瀏覽1666次
前面學習了什么是java對象排序以及為什么要對對象進行排序的問題,下面我們就來講講排序的方法——比較器對象排序方法的內容,相信java零基礎的新手朋友們在學習了前面文章的基礎上一定可以學會下面的內容。
先來介紹什么是比較器,比較器是一個包含一個方法的對象,這個方法能夠對兩個對象進行比較。則排序方法可以在需要執行兩個對象之間的比較操作時,將比較器應用于這兩個對象。這是學習比較器對象排序方法的第一個需要知道的內容。
對一個對象的compare To方法的定義應該在某種意義上定義對象的自然順序。舉例來說,對于電話號碼本的例子,所有的條目就可以基于與條目相關的名字進行理想排序。然而有時候,compare To不能提供想要的順序,或者更糟糕的,并沒有為一個對象定義compareTo方法。在這些情況下,程序員采用另外一種方式,指定一個稱為比較器(comparator)的外部比較方法。這種機制的優點是,不同的比較器可以用在相同的數據上進行不同的排序,或者基于不同的鍵進行排序,在java語言中,比較器可以是任何一個實現java.util.Comparator接口的類。這個接口提供了下面的方法:
與前面討論過的compareTo方法一樣,compare方法返回一個表示兩個數值之間關系的整數。然而與compareTo方法不同的是,compare不與被比較的對象相關聯。結果,比較器并不是對象實現專有的;它必須基于從存取函數中取得的信息進行比較。
作為比較器實現的一個例子,我們考慮一下字符串的不區分大小寫的比較的實現,稱為Caseless Comparator。這種比較方法將兩個字符串對象都轉換成大寫表示,然后執行標準的字符串比較:
比較的結果是,大小寫不同,拼寫相同的字符被排列在一起。例如,如果數組包含著兒童的繞口令:
Fuzzy Wuzzy was a bear.
Fuzzy Wuzzy had no hair .
Fuzzy Wuzzy wasn ’t fuzzy , wuzzy?
則這些文字可以被排序成下面的順序:
a bear. Fuzzy Fuzzy Fuzzy fuzzy, had hair.
no was wasn’t Wuzzy Wuzzy Wuzzy wuzzy?
這個結果應與字符串對象的標準排列進行比較,標準排列的輸出如下:
Fuzzy Fuzzy Fuzzy Wuzzy Wuzzy Wuzzy a bear .
fuzzy, had hair . no was wasnt wuzzy?
為了在排序中使用比較器,只需要用比較器中的Compare方法代替CompareTo方法即可。例如,下面是一個使用比較器對一Object數組中的值進行排序的插入排序方法:
注意在這個描述中,我們沒有看到所包含的數值類型的細節。所有的數據都作為object進行操作,而Object由比較器提供的compare方法進行操作。
其實java實現對象排序可以分為兩種方式,一種是自然排序,另一種是定制排序,這篇文章介紹的比較器對象排序屬于自然排序范疇,這種方法沒有使用范圍的局限性,所以希望大家都可以掌握比較器對象排序的方法,以更好的提高java編程能力。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習