我知道這似乎是一個微不足道的問題(我毫不懷疑所有'聰明人'會來標記它爲重複),但我沒有找到足夠的解釋我的問題。難道這讓我很難理解這個簡單的主題嗎?如何在實現「可比較」時定義排序順序?
我理解其背後Comparable
接口以及它是如何工作的基礎知識,但我有一個真正的困難已瞭解如何確定的排序ORDER。
例如 - 我有一個非常簡單的Fruit
類:
public class Fruit implements Comparable<Fruit> {
private String fruitName;
private String fruitDesc;
private int quantity;
public Fruit(String fruitName, String fruitDesc, int quantity) {
this.fruitName = fruitName;
this.fruitDesc = fruitDesc;
this.quantity = quantity;
}
public String getFruitName() {
return fruitName;
}
public void setFruitName(String fruitName) {
this.fruitName = fruitName;
}
public String getFruitDesc() {
return fruitDesc;
}
public void setFruitDesc(String fruitDesc) {
this.fruitDesc = fruitDesc;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public int compareTo(Fruit compareFruit) {
//ascending order
return this.quantity - ((Fruit) compareFruit).getQuantity();
}
爲什麼聲明compareTo
像上面會按升序進行排序,並在聲明它的時候正好相反:
return ((Fruit) compareFruit).getQuantity() - this.quantity;
它將按降序排列?
你是什麼意思,「你怎麼確定他們之間?」?你的意思是如何訂購相同數量的水果?這基本上取決於所使用的排序算法。但是你不應該對這些元素的順序做任何假設,因爲它可能會被忽視。如果您依賴一個確切而穩定的訂單,則需要確保您的班級的所有屬性都是按排序順序考慮的。 – dpr
不知道我是否正確理解你的問題 - 排序順序只是由'compareTo'返回的整數符號決定的。順便說一下,不要通過getter和直接屬性訪問混合訪問屬性。 –
當您交換認爲大於或小於的順序時,您將從升序切換到降序。 –