如题:
在集合的操作方法中有个sort方法,对集合元素进行排序,但是有时候集合当中存储的都是对象,而对象拥有很多属性,所以排序就成了问题,如果我们想要将集合以某个属性为标准进行排序那么就需要重写Comparable接口中的compareTo(Object o)抽象方法
compareTo的比较规则:
升序:this.某个属性 小于 o.相同属性 返回负数,相等返回0,this.某个属性 大于 o.相同属性 返回正数
降序:this.某个属性 小于 o.相同属性 返回正数,相等返回0,this.某个属性 大于 o.相同属性 返回负数
两种重写实现:
此处Sum为Student的某个属性
// 第一种
@Override
public int compareTo(Student o) {
return this.getSum() - o.getSum();// 升序排序
return o.getSum() - this.getSum();// 降序排序
}
// 第二种
// 降序排序
@Override
public int compareTo(Student o) {
if (sum < o.getSum()) {
return 1;
}else if (sum > o.getSum()) {
return -1;
}else {
return 0;
}
}
// 升序排序
@Override
public int compareTo(Student o) {
if (sum < o.getSum()) {
return -1;
}else if (sum > o.getSum()) {
return 1;
}else {
return 0;
}
}
结果展示:
排序前:
[名字:张三 语文成绩:53 数学成绩:65 英语成绩:76 总分为:194
, 名字:李四 语文成绩:54 数学成绩:65 英语成绩:87 总分为:206
, 名字:王五 语文成绩:65 数学成绩:87 英语成绩:54 总分为:206
, 名字:赵六 语文成绩:65 数学成绩:86 英语成绩:54 总分为:205
, 名字:田七 语文成绩:87 数学成绩:65 英语成绩:76 总分为:228
]
排序后:
[名字:田七 语文成绩:87 数学成绩:65 英语成绩:76 总分为:228
, 名字:李四 语文成绩:54 数学成绩:65 英语成绩:87 总分为:206
, 名字:王五 语文成绩:65 数学成绩:87 英语成绩:54 总分为:206
, 名字:赵六 语文成绩:65 数学成绩:86 英语成绩:54 总分为:205
, 名字:张三 语文成绩:53 数学成绩:65 英语成绩:76 总分为:194
]