[英]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.