我的简单示例(已编译的工作代码)只是不按重量对水果进行排序。
import java.util.Arrays;
public class Test {
public static class Fruit implements Comparable<Fruit> {
public int weight = 0;
public Fruit(int w) { weight = w; }
// compare this fruit to a given fruit f
public int compareTo(Fruit f) {
return (weight > f.weight) ? 1 : 0;
}
}
public static void main(String[] args) {
// get some fruits (we intentionally create a box for 100 fruits)
Fruit[] fruits = new Fruit[100];
for (int i = 0; i < 10; i++) {
fruits[i] = new Fruit((int)(Math.random() * 50 + 1));
}
// sort fruits by weight
Arrays.sort(fruits, 0, 10);
// print fruit weights
for (int i = 0; i < 10; i++) {
System.out.print(fruits[i].weight + " ");
}
}
}
为什么会这样?
好吧,在我的问题(不是关于水果)中,我的对象永远不会成对,这就是为什么我认为一个对象比另一个更大或更小。那么当我知道0(对象相等)永远不会发生时,我怎么能处理这种情况呢?
答案 0 :(得分:7)
compareTo
必须返回3个值中的一个:
>0
- &gt;大于
0
- &gt;等于
<0
- &gt;小于
您的compareTo
方法仅返回0
或1
;解决这个问题。
答案 1 :(得分:4)
使用类public static int compare(int x, int y)
中的方法java.lang.Integer
(自Java 7开始)。
public int compareTo(Fruit f) {
return Integer.compare(weight, f.weight);
}
答案 2 :(得分:3)
如果weight
永远不会消极,那么您可以尝试
return weight - f.weight;
而不是
return (weight > f.weight) ? 1 : 0;
从最低到最高值排序。
答案 3 :(得分:2)
最好的方法是使用JDK提供的方法来比较int
值,这也清楚地表明代码正在做什么
public int compareTo(Fruit f) {
return Integer.compare(weight, f.weight);
}
在版本7之前,您有两种选择:
public int compareTo(Fruit f) {
return weight - f.weight; // terse, but slightly obtuse
}
public int compareTo(Fruit f) {
return new Integer(weight).compareTo(f.weight); // ugly, but supposedly clear
}
我的偏好是减法,因为一旦你理解了它,从那时起就很清楚了。
答案 4 :(得分:0)
您的compareTo
方法应返回-1,0,1
LESSER = -1;
EQUAL = 0;
BIGGER = 1;