Comparable接口
java提供了一个Comparable接口
用来定义比较规则,可实现对象间的比较。
Comparable接口可以让实体类的两个实例依据类中某一字段的值进行比较或者排序。
需求:对两个Student类对象的年龄age进行比较,获取年龄较大的Student对象。
1.定义一个学生类Student,具有年龄age和姓名username两个属性,并通过Comparable接口提供比较规则:
public class Student implements Comparable<Student>{
private String username;
private int age;
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
@Override
public String toString() {
return "Student{" +
"username='" + username + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Student o) {
return this.age - o.age;
}//复写compareTo(object o)方法
}
2.定义测试类Test,在测试类Test中定义测试方法Comparable getMax(Comparable c1,Comparable c2)完成测试
定义getMax(Comparable c1,Comparable c2)
方法用于获取年龄较大的对象,传入该方法的两个参数必须是实现了Comparable接口的对象。
public class TestComparable {
public static void main(String[] args) {
//创建两个Student对象,并调用getMax方法,完成测试
Student s1 = new Student();
s1.setUsername("张三");
s1.setAge(12);
Student s2 = new Student();
s2.setUsername("李四");
s2.setAge(18);
Comparable max = getMax(s1,s2);
System.out.println(max);
}
public static Comparable getMax(Comparable c1,Comparable c2){
int result = c1.compareTo(c2);
//如果result<0,则c1小于c2;
//如果result>0,则c1大于c2;
//如果result==0,则c1与c2一样大;
if (result>=0){
return c1;
}else {
return c2;
}
}
}
3.输出结果
李四18岁大于张三12岁,所以输出学生类对象 用户姓名李四,年龄18