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源码方法规则执行的。
十分感谢,当时找出答案了,没有回来看,谢谢