实现以下功能:
- 比较学生年龄
- 比较学生姓名
Student类
public class Student implements Comparable<Student>{
public String name; // 成员变量:姓名
public int age; // 成员变量:年龄
public Student(String name, int age) { // 构造方法
this.name = name;
this.age = age;
}
@Override
public String toString() { // 重写toString方法
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Student o) { // 通过Comparable接口比较年龄
return this.age - o.age;
}
}
年龄比较器
import java.util.Comparator;
public class AgeCmp implements Comparator<Student> {
// 重写compare方法比较年龄
@Override
public int compare(Student o1, Student o2) {
return o1.age - o2.age; // 从小到大排序
//return o2.age - o1.age // 从大到小排序
}
}
姓名比较器
import java.util.Comparator;
public class NameCmp implements Comparator<Student> {
// 重写compare方法比较姓名
@Override
public int compare(Student o1, Student o2) {
return o1.name.compareTo(o2.name); // 调用String类方法
}
}
测试类
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
Student student1 = new Student("JDK", 1);
Student student2 = new Student("Alan", 3);
Student student3 = new Student("Bob", 2);
System.out.println("==========1==========");
if (student1.compareTo(student2) > 0) { // 调用类中方法比较
System.out.println("student1.age >= student2.age");
} else {
System.out.println("student1.age < student2.age");
}
System.out.println("==========2==========");
Student[] students = new Student[3]; // 创建student类型数组
students[0] = student1;
students[1] = student2;
students[2] = student3;
System.out.println(Arrays.toString(students)); // 排序前
Arrays.sort(students); // 根据类中重写的compareTo方法比较年龄
NameCmp nameCmpArray = new NameCmp();
Arrays.sort(students, nameCmpArray); // 根据类中重写的compareTo方法比较姓名
System.out.println(Arrays.toString(students)); // 排序后
System.out.println("==========3==========");
NameCmp nameCmp = new NameCmp(); // 创建姓名比较器
int ret1 = nameCmp.compare(student1, student2);
if (ret1 >= 0) { // 用比较器比较姓名
System.out.println("student1.name >= student2.name");
} else {
System.out.println("student1.name < student2.name");
}
System.out.println("==========4==========");
AgeCmp ageCmp = new AgeCmp(); // 创建年龄比较器
int ret2 = ageCmp.compare(student1, student2);
if (ret1 >= 0) { // 用比较器比较年龄
System.out.println("student1.age >= student2.age");
} else {
System.out.println("student1.age < student2.age");
}
}
}

参与讨论
(Participate in the discussion)
参与讨论