Java实现学生类排序:Comparable和Comparator接口详解

本文将介绍如何使用Java的ComparableComparator接口实现学生类的排序功能,排序规则为先按姓名升序排序,如果姓名相同则依据年龄升序排序。

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);
        }
    }
}

总结

本文介绍了如何使用ComparableComparator接口对学生类进行排序。Comparable接口适用于定义类的自然排序规则,而Comparator接口则用于实现自定义的排序规则。

Java实现学生类排序:Comparable和Comparator接口详解

原文地址: http://www.cveoy.top/t/topic/oxU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录