无报错,但是为什么排序没对??不应该是【abcd,abc,def,a】吗。。

public class StringCmp implements Comparator{
public int compare(String e1,String e2){
int len1 = e1.length();
int len2 = e2.length();

    return len1-len2;
}

}

public static void sort(Object[] arr,Comparator cmp){
boolean sorted = true;//假定有序

    for(int i=0;i<arr.length-1;i++ ){

        for(int j=i+1;j<arr.length/*减少次数*/-i-1;j++){

            if(cmp.compare(arr[i], arr[i+1])<0){
                Object temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
                sorted = false;
            }
        }
        if(sorted){ //假定成功跳出,减少趟数
            break;
        }
    }
    //System.out.println(Arrays.toString(arr));
}

public class DemoString {
public static void main(String args[]){
    //按照长度进行比较
    String   arr = new String[]{"a","abcd","abc","def"};
    util.sort(arr, new StringCmp());
    System.out.println(Arrays.toString(arr));

}

}
输出
[abcd, a, abc, def]

实现了 Comparator ,是要重写compare方法。可是你的重写标记怎么没呢?比较器

public class StringCmp implements Comparator{
@Override// ????????????
public int compare(String e1,String e2){
int len1 = e1.length();
int len2 = e2.length();
return len1-len2;
}
}

public class StringCmp implements Comparator{
@Override// ????????????
public int compare(String e1,String e2){
int len1 = e1.length();
int len2 = e2.length();
return len1-len2;
}
}
//总结:如果上面有重写注释@Override 那么就按你自己重写的函数执行,如果就像你上面的写法,等于没有重写。那么程序执行不报错
是应为,你比较的是字符串,字符串本身有内置compare比较器,程序就按内置的比较规则执行。你去jdk看看String 源码的compare方法
规则,你的输出是按jdk源码方法规则执行的。

十分感谢,当时找出答案了,没有回来看,谢谢