compareto方法

Comparable接口中的compareto方法:

 public int compareTo(T o);

返回值含义

小于零:此实例按排序顺序在 obj 前面。

零:此实例与 obj 在排序顺序中出现的位置相同。

大于零:此实例按排序顺序在 obj 后面。

String类中的compareto方法:

public int compareTo(String anotherString) {
    int len1 = count;
    int len2 = anotherString.count;
    //获取到两个字符串的较短的长度
    int n = Math.min(len1, len2);
    char v1[] = value;
    char v2[] = anotherString.value;
    int i = offset;
    int j = anotherString.offset;
    if (i == j) {
        int k = i;
        int lim = n + i;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            //如果两个字符的ASC不相同,则直接返回
     if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
    } else {
        while (n-- != 0) { //长度不同的情况:将前面长度相同的字母进行比较,如果不同返回ASCII码的差值;如果都相同,直接求长度的差值
           char c1 = v1[i++];
           char c2 = v2[j++];
             //如果两个字符的ASC不相同,则直接返回
           if (c1 != c2) {
               return c1 - c2;
           }
        }
    }
    //如果都一样,返回两个字符串的长度查
    return len1 - len2;
    }

"abcd".compareTo("adef")== -2

"abc".compareTo("abcdef")== -3

"abc".compareTo("abc") == 0

重写Comparable接口compareto方法

@Override
public int compareTo(Object o){
    if(o instanceof Student){
        Student s = (Student)o;
        //return this.name.compareTo(s.name);//按name属性从低到高排序
        return this.id - s.id; //按id属性从小到大排序
    }
    return 0;
}
posted on 2014-12-07 12:17  追梦的小屁孩  阅读(604)  评论(0编辑  收藏  举报