2 回答

TA貢獻1829條經(jīng)驗 獲得超7個贊
還有哪些其他類型的數(shù)據(jù)結(jié)構(gòu)允許這種行為?
-> 您可以通過實現(xiàn)接口 Comparable 對對象進行排序。例如:
public class Car implements Comparable<Car> {
private String name;
@Override
public int compareTo(Car b) {
return name.compareTo(b.name);
}
}
->您也可以在內(nèi)部類中使用沒有覆蓋方法比較的比較器。
public class Car implements Comparator<Car> {
private String name;
private double price;
@Override
public int compare(Car b1, Car b2) {
return b1.price - b2.price;
}
}
什么時候編寫這種性質(zhì)的代碼比較有利?為什么不覆蓋變量聲明之外的方法?
-> 想象一下,在使用按名稱對對象 Car 進行排序后,您想按其他方式(如按價格、按重量)進行排序。當您想在不同時間以不同方式對對象進行排序時,如何做到這一點?我們在內(nèi)部類中使用 Comparator 和 define 來做到這一點。
*此外,Comparator 是一個功能接口,因為它是唯一要實現(xiàn)的抽象方法。您可以在一行代碼中使用時髦的語法重寫:例如:
Compareator<Car> byPrice = (b1,b2) -> b1.price - b2.price;

TA貢獻1797條經(jīng)驗 獲得超6個贊
這個機制已經(jīng)在評論中得到了很好的解釋。順便說一句:自 Java 8 以來,這種匿名類的用法被認為有些過時,因為它可以用簡單的 Lambda 表達式代替:
tempRequests.sort((l, r) -> l.compareTo(r));
這適用于所有“功能接口”,它被定義為具有恰好一個非靜態(tài)和非默認方法的接口。
添加回答
舉報