java compare 降序/升序怎么确定

private class ComparatorList implements Comparator {
public int compare(Object arg0, Object arg1) {
ErpAccountCheckDetail cd1 = (ErpAccountCheckDetail)arg0;
ErpAccountCheckDetail cd2 = (ErpAccountCheckDetail)arg1;
return cd1.getCheckDate().compareTo(cd2.getCheckDate());
}
}
return cd1.getCheckDate().compareTo(cd2.getCheckDate());返回值是怎么确定升序降序的,返回值不是有可能为1,-1,0吗,是怎么确定升序或是降序的

我印象中如果不重写compareTo方法那返回值都是-1吧......
我一般都是实现Comparable接口,重写CompareTo方法就可以了。
至于降序升序,可以这样比较:
假如A的值大于B,你返回1。这样调用Collections.sort()方法就是升序
假如A的值大于B,你返回-1。这样调用Collections.sort()方法就是降序
一般比较的都是对象中一个具体的数值。不知道你的类的构造,不好给例子追问

cd1.getCheckDate().compareTo(cd2.getCheckDate())返回值不是一会1,一会-1吗,到底什么时候升序什么时候降序呢

追答

怎么会?你用System.out.println(cd1.getCheckDate().compareTo(cd2.getCheckDate()))打印出结果看的吗?

追问

结果每次不一样

追答

cd1.getCheckDate()

返回什么类型的值?Date还是String?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-28

先举个例子

1 2 5 3 6 9 7

从大家的认知来看,上面的数字从小到大为

1 2 3 5  6 7 9

 

但是如果是一对的字符串或者对象呢?

那么就需要Comparator来自定义字符串或对象的比较方法,来排序了。

aa  bb cc  cc  ab

如果你在Comparator中自定义c是大于b   b是大于a的 那么

降序排序就是

aa ab bb cc cc

 

对于 public int compare(Object arg0, Object arg1)的理解

如果放回1  说明arg0 > arg1  如 2  1

如果放回0  说明arg0 = arg1  如 cc  cc

如果放回-1 说明arg0 < arg1  如 6  7

 

所以如果你希望

1 2 5 3 6 9 7 的排序变成 离5最接近的先输出那么如下代码(降序)

 public int compare(Object arg0, Object arg1) {
            Integer cd1 = (Integer)arg0;
            Integer cd2 = (Integer)arg1;
            if (Math.abs(5-cd1)-Math.abs(5-cd2)>0)
                return 1;
            if (Math.abs(5-cd1)-Math.abs(5-cd2)==0)
                return 0;
            if (Math.abs(5-cd1)-Math.abs(5-cd2)<0)
                return -1;
 }

第2个回答  2014-02-28
String 是字符串,它的比较用compareTo方法,它从第一位开始比较,如果遇到不同的字符,则马上返回这两个字符的ascii值差值..返回值是int类型
第3个回答  2018-07-26
参数o1 o2 升序

参数o2 o1 降序

public int compare(String o1, String o2) {
    //升序
    return o1.compareTo(o2); 
}


public int compare(String o1, String o2) {
    //降序
    return o2.compareTo(o1); 
}

这个是不是稍微好理解一点