亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我可以將比較器對象傳遞給排序方法?

為什么我可以將比較器對象傳遞給排序方法?

繁花不似錦 2023-10-19 21:50:51
從我見過的所有排序方法示例中,我從未遇到過傳遞比較器定義的示例。如果比較器設計為返回負值、正值或 0 來對對象進行排序,那么排序方法會如何處理這些信息?sort 方法如何從 Comparator 定義中獲取有意義的信息并執行其操作?這是有問題的排序方法:    public void sort() {        library.sort(new BookComparator());    }這是整個 Comparator 類:import java.util.Comparator;public class BookComparator implements Comparator<Book> {    public int compare(Book a, Book b) {        if(a == null || b == null) {            throw new NullPointerException();        }        int result = 0 ;        if(a.getAuthor() == null) {            if(b.getAuthor() != null) {                result = -1;            }        } else if(b.getAuthor() == null) {            result = 1;        } else {            result = a.getAuthor().compareTo(b.getAuthor());        }        if(result !=0) {            return result;        }        if(a.getTitle() == null) {            if(b.getTitle() != null) {                result = -1;            }        } else if(b.getTitle() == null) {            result = 1;        } else {            result = a.getTitle().compareTo(b.getTitle());        }        if(result !=0) {            return result;        }        if(a.getYear() < b.getYear()){            return -1;        } else if (a.getYear() == b.getYear()){            return 0;        } else {            return 1;        }    }}
查看完整描述

2 回答

?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

您可以將 Comparator 的實例傳遞到排序方法中,以便您可以按除默認/自然的對象排序方式之外的不同方面進行排序。

例如,如果有一個 Book 對象,自然排序可能基于標題。但是如果您想根據杜威十進制數進行排序怎么辦?還是根據作者的名字?或者頁數?您可以通過編寫一個比較器來比較 Book 對象的這些字段來實現這一點。

實際的排序算法不需要知道正在排序的對象。它只需要一個一致的比較器(即比較 A < B 和 B < C,然后 A < C 和 C > B 和 B > A,等等)


查看完整回答
反對 回復 2023-10-19
?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

如果比較器設計為返回負值、正值或 0 來對對象進行排序,那么排序方法會如何處理這些信息?sort 方法如何從 Comparator 定義中獲取有意義的信息并執行其操作?

基于比較器的排序方法(例如合并排序或冒泡排序)需要重復查看集合中的兩個元素并決定哪個元素應該“排在第一位”。該決定由比較器做出,比較器返回“較小”、“較大”或“相同大小”。

這些信息就足夠了,排序方法不需要了解正在排序的對象類型。它可以重新排列集合中元素的順序,直到“左側”的所有元素都“小于”“右側”的元素。

這種方法不適用于像“桶排序”這樣的東西,它需要為每個元素本身分配絕對數值(而不僅僅是與另一個元素相比的相對值)。


查看完整回答
反對 回復 2023-10-19
  • 2 回答
  • 0 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號