一.compare实现了Comparator接口,compareTo实现了compareable接口。 可以对对象和基本类型进行排序。 基本类型的排序可以直接调用Arrays.sort (和Conllections.sort )方法进行排序。 默认值为升序。 降序和对象排序需要重写相应的方法。
二。
公共int比较to (studento ) {
returnthis.age - o.age; //比较年龄(年龄升序)需按降序直接改为return o.age-this.age;
}
公共int比较(Integer o2,Integer o2 ) {
返回O1-O2; //默认升序需要降序直接返回O2-O1;
}
如果使用compareTo,则必须在要比较的实体类中实现compareable接口并重写compareTo (方法)。 比较到) )通常用于对象的比较排序。 比较) )通常用于对基本类型进行比较排序,但也可以对对象进行比较排序。
3 .为什么this.age - o.age和o1-o2是升序的? 请注意,在sort中默认值为升序。 这个一定要记住。
compare函数的返回值-1、1、0是什么意思?
返回值为-1,表示左边的数量小于右边的数量,左右的数量不交换。
返回值为0时,表示左边的数量等于右边的数量,左右的数量不交换。
返回值为1,表示左边的数量大于右边的数量,左右的数量会互换。 (不交换就不能维持升顺。
在上例中,this.age可以理解为左边的数,o.age可以理解为右边的数。
this.age-o.age0表示左边的数大于右边的数,return this.age-o.age返回正数,进行左右交换,因此最终输出为升序。
this.age-o.age0表示左边的数量小于右边的数量,return this.age-o.age返回负数,无需更换,因此最终输出为升序。
4 .比较对象的多个值时,请确保重写compareTo或compare方法
例如:1)在实体体系中,实现成绩从高到低、成绩相等、年龄低等。
公共int比较to (students tu ) {
if(this.Scorestu.Score ) {
返回- 1; //这里回到-1是因为左边比右边大,所以本来是降序,所以不用左右调换
}else{
}elseif(this.scorestu.score ) )
返回1; //这里返回1是因为左边比右边小,所以需要降序,所以返回1的话可以左右调换
}else{
if(this.agestu.age ) {
返回1;
}elseif(this.agestu.age ) )。
返回- 1;
}else{
返回0;
}
}
}
备注:判断中的条件中,左右情况原本和你的需求是升序还是降序一样,可以不用renturn -1左右代替。 否则,左右需要互换,默认为升序,所以不会混淆。 compare ) )方法的改写你也可以这么记住。
collections.sort(list,new ComparatorMenu ) @overridepublicintcompare ) Menu o2,Menu o2 ) returnO1.compareto ) O2 } ); 虽然compare可以与compareTo一起使用,但compareTo必须在相应的实体类中重写方法。
@ overridepublicintcompareto (menuo ) if ) integer.value of (this.id ) integer.value of (o.id ) ) { return -1; } else if (integer.value of (this.id ) integer.value of (o.id ) ) { return 1; }else { return 0; }这是id降序的写法,也可以直接
@ overridepublicintcompareto (menuo ) returno.id.com Pareto (this.id ); }