我知道这似乎是一个微不足道的问题(我毫不怀疑所有'聪明人'会来标记它为重复),但我没有找到足够的解释我的问题。难道这让我很难理解这个简单的主题吗?如何在实现“可比较”时定义排序顺序?
我理解其背后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和直接属性访问混合访问属性。 –
当您交换认为大于或小于的顺序时,您将从升序切换到降序。 –