Java 中 Comparable 和 Comparator 比较
2016-08-10 16:25 toFind_U 阅读(210) 评论(0) 收藏 举报compareto
String中的compareto方法,返回参与比较的前后两个字符串的asc码的差值,看下面一组代码
String a="a",b="b";
System.out.println(a.compareto.b);
则输出-1;
若a="a",b="a"则输出0;
若a="b",b="a"则输出1;
单个字符这样比较,若字符串比较长呢??
若a="ab",b="b",则输出-1;
若a="abcdef",b="b"则输出-1;
也就是说,如果两个字符串首字母不同,则该方法返回首字母的asc码的差值;
如果首字母相同呢??
若a="ab",b="a",输出1;
若a="abcdef",b="a"输出5;
若a="abcdef",b="abc"输出3;
若a="abcdef",b="ace"输出-1;
即参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值,如果两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值
重点来了,
**普通的类要实现排序,必须实现java.lang.Comparable接口,并重写CompareTo()方法。 **
compare
Comparator接口位于包Java.util下,有一个compare方法。
需要自己写一个类实现Comparator,然后用比较器去比较大小。
Step类就不贴了,一个AcceptTime的属性,一个AcceptAddress的属性。
public class StepComparator implements Comparator
/**
* 如果o1小于o2,返回一个负数;如果o1大于o2,返回一个正数;如果他们相等,则返回0;
*/
@Override
public int compare(Step o1, Step o2) {
Date acceptTime1=UtilTool.strToDate(o1.getAcceptTime(), null);
Date acceptTime2=UtilTool.strToDate(o2.getAcceptTime(), null);
//对日期字段进行升序,如果欲降序可采用before方法
if(acceptTime1.after(acceptTime2)) return 1;
return -1;
}
}
public void sort() throws Exception{
List
//对集合对象进行排序
StepComparator comparator=new StepComparator();
Collections.sort(steps, comparator);
if(steps!=null&&steps.size()>0){
for(Step step:steps){
System.out.println(step.getAcceptAddress());
System.out.println(step.getAcceptTime());
}
}
}
可以说一个是自已完成比较,一个是外部程序实现比较的差别而已。
可以对付的题目
比如3,12,45组成一个最大的数45312,就可以用compareto实现比较,或者用Arrays.sort(arr,new IntegerComparator())实现比较。
浙公网安备 33010602011771号