一、用法
1. Comparable用法
源码如下:
public interface Comparable<T> {
//a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
负数、0、正数 分别代表该对象 小于、等于 大于 比较对象
public int compareTo(T o);
}
创建一个学生类如下:
public class StudentModel implements Comparable<StudentModel> {
private int num;//编号
private int age;//年龄
private String name;//姓名
public StudentModel(int num, int age, String name) {
this.num = num;
this.age = age;
this.name = name;
}
//get set方法
...
//将自身与o做对比 自身在前将是升序排序 反之降序
@Override
public int compareTo(StudentModel o) {
return num -o.num ;
}
@Override
public String toString() {
return name+",num="+num+",age="+age;
}
}
测试代码:
List<StudentModel> list = new ArrayList<>();
list.add(new StudentModel(1,10,"张三"));
list.add(new StudentModel(5,9,"李四"));
list.add(new StudentModel(3,12,"王五"));
Collections.sort(list);
for (StudentModel item:list) {
System.out.println(item);
}
测试结果:根据编号升序排序
张三,num=1,age=10
王五,num=3,age=12
李四,num=5,age=9
2. Comparator用法
如果需求变更,希望按照学生age排序,则上述代码需要改动,这时候我们可以使用Comparator来满足需求,测试代码如下:
Collections.sort(list, new Comparator<StudentModel>() {
@Override
public int compare(StudentModel o1, StudentModel o2) {
return o1.getAge()-o2.getAge();
}
});
for (StudentModel item:list) {
System.out.println(item);
}
测试结果如下:
李四,num=5,age=9
张三,num=1,age=10
王五,num=3,age=12
二、总结
- Comparable与Comparator都可以实现排序,都是接口类型;
- Comparable放在实体类中,定意一种排序,当排序需求变更,无法满足;
- Comparator 可以理解为对Comparable的扩展,可以对同一个类定义多个排序规则,使用更加灵活。
网友评论