一.介绍
java的接口comparable需要经常访问,例如对集合和数组进行排序。 有两种方法可以应用于Arrays.sort (或Collections.sort .如果集合中的对象是自定义对象,则为自定义对象集合)数组)。 介绍Comparable的使用方法。
二. java库提供的对象排序
List中Integer对象的排序如下所示
公共类主类{
publicstaticvoidmain (string [ ] args ) {
List list=new ArrayList (;
Random rd=new Random (;
for(intI=0; i10; I )
list.add(rd.nextint ) 100 );
for (inti :列表) ) )。
system.out.print(I ' );
collections.sort(list;
System.out.println (' ' );
for (inti :列表) ) )。
system.out.print(I ' );
}
}
这很简单。 结果如下。
从Integer的源代码中,可以看到Integer类继承了Comparable接口
然后重写了compareTo。 这也是Comparable唯一的方法。
三.自定义对象排序
要定制对象,必须继承Comparable接口并重写compareTo方法。 在此,列举比较学生成绩的Student类,如下所示。
classstudentimplementscomparable {
int sno;
int score;
sudent(intSnO,int score ) {
this.sno=sno;
this.score=score;
}
@Override
公共公司到(studento ) {
if(this.Score
Elseif(this.Scoreo.Score ) return 1;
else return 0;
}
}
设本对象为a,比较对象为b,用于比较的属性为x。 在compareTo方法中,勤奋的样子返回1,同样返回0。 在这里,如果a.compareto(b )==0,为了保证一致性,希望a.equals )也为真),但这不是强制的),但是根据情况决定是否改写equals是可能的
执行结果如下
如果Comparable接口没有继承上例中的Student,程序将报告错误,编译将失败。 必须注意的是,只有继承Comparable接口并重写compareTo方法时,此类才会被视为Compareable类。 如果值中写有compareTo方法,则implement Comparable只是一个普通类