簡體   English   中英

在沒有比較器的情況下使用Array.sort()對數組進行排序

[英]Sorting an array using Array.sort() without a comparator

我必須使用Arrays.sort()通過對象的參數之一對自定義對象的數組進行排序,但無需傳遞Comparator。 這是一項家庭作業,我的教授希望我們在沒有比較器的情況下完成作業。

更具體地說,我有一個對象類型為“女性”的array [],女性由參數“名稱”和“年齡”組成。 我必須使用Arrays.sort(femaleList)按年齡對數組進行Arrays.sort(femaleList) ,但同樣不能使用Comparator。

我正在嘗試使用.getAge()或類似的東西,但是它不起作用。 我假設有一個我忽略的相對簡單的解決方案,任何幫助將不勝感激。

除非我缺少任何東西,否則像這樣實現Comparable<Female>

class Female implements Comparable<Female> {
    // ...
    public int compareTo(Female that) {
        if (this.age < that.age) {
            return -1;
        } else if (this.age > that.age) {
            return 1;
        }
        return 0;
    }
}

如果您最后一行

return this.name.compareTo(that.name);

如果年齡相同,它將按name排序。

可以這樣簡單:

class Female implements Comparable<Female> {
    // ...
    public int compareTo(Female that) {
        return this.age - that.age;
    }
}

因為您只需要返回:

負整數,零或正整數,因為此對象小於,等於或大於指定的對象。

http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html

請注意,此實現存在風險。 假設減去年齡不會導致溢出,如果它們的符號不同(本質上是加法)並且其總和大於年齡類型可以容納的范圍,則不會發生溢出。

要注意的另一個重要點是不要使用減法來比較整數值,因為減法的結果可能會溢出,因為Java中的每個int運算都是模2 ^ 32。 使用Integer.compareTo()或邏輯運算符進行比較。 在一種情況下,您可以使用減法來減少混亂並提高性能。 我們知道compareTo不在乎幅度,它只是在乎結果是正數還是負數。 在比較兩個整數字段時,如果您絕對確定兩個操作數都是正整數或更准確地說[它們的差]必須小於Integer.MAX_VALUE,則可以使用減法。 在這種情況下,將不會有溢出,並且您的compareTo將變得簡明快捷。

http://javarevisited.blogspot.com/2011/11/how-to-override-compareto-method-in.html

您需要使Female工具Comparable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM