Java实现学生类排序:Comparable和Comparator接口详解
Java实现学生类排序:Comparable和Comparator接口详解
本文将介绍如何使用Java的Comparable和Comparator接口实现学生类的排序功能,排序规则为先按姓名升序排序,如果姓名相同则依据年龄升序排序。
1. 创建学生类Student
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Student implements Comparable<Student> {
private String sno;
private String name;
private int age;
public Student(String sno, String name, int age) {
this.sno = sno;
this.name = name;
this.age = age;
}
public String getSno() {
return sno;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public int compareTo(Student student) {
int nameComparison = this.name.compareTo(student.name);
if (nameComparison == 0) {
return Integer.compare(this.age, student.age);
} else {
return nameComparison;
}
}
@Override
public String toString() {
return 'Student{' +
'sno=' + sno + '\'' +
', name=' + name + '\'' +
', age=' + age +
'}';
}
}
2. 使用Comparable接口实现自然排序
public class Main {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student('202211671101', '李明', 20));
students.add(new Student('202211671102', '张三', 18));
students.add(new Student('202211671103', '李明', 22));
students.add(new Student('202211671104', '王五', 20));
// 使用Comparable接口实现的自然排序
Collections.sort(students);
System.out.println('使用Comparable接口排序(姓名升序,年龄升序):');
for (Student student : students) {
System.out.println(student);
}
}
}
3. 使用Comparator接口实现定制排序
public class Main {
// ... (省略部分代码,与上面相同)
// 使用Comparator接口实现的定制排序
Collections.sort(students, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
int nameComparison = s1.getName().compareTo(s2.getName());
if (nameComparison == 0) {
return Integer.compare(s1.getAge(), s2.getAge());
} else {
return nameComparison;
}
}
});
System.out.println('使用Comparator接口排序(姓名升序,年龄升序):');
for (Student student : students) {
System.out.println(student);
}
}
}
总结
本文介绍了如何使用Comparable和Comparator接口对学生类进行排序。Comparable接口适用于定义类的自然排序规则,而Comparator接口则用于实现自定义的排序规则。
原文地址: http://www.cveoy.top/t/topic/oxU 著作权归作者所有。请勿转载和采集!