MST

星途 面试题库

面试题:Java TreeSet自定义比较器的多条件排序实现

假设有一个包含学生信息的类Student,有属性name(字符串)、age(整数)和score(浮点数)。要求创建一个TreeSet,使用自定义比较器,先按age从小到大排序,如果age相同则按score从大到小排序,如果score也相同则按name的字典序排序,请实现此功能。
43.8万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

以下是使用Java实现上述功能的代码:

import java.util.Comparator;
import java.util.TreeSet;

class Student {
    String name;
    int age;
    float score;

    public Student(String name, int age, float score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }
}

public class Main {
    public static void main(String[] args) {
        TreeSet<Student> treeSet = new TreeSet<>(new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                if (s1.age != s2.age) {
                    return s1.age - s2.age;
                } else if (s1.score != s2.score) {
                    return Float.compare(s2.score, s1.score);
                } else {
                    return s1.name.compareTo(s2.name);
                }
            }
        });

        Student student1 = new Student("Alice", 20, 85.5f);
        Student student2 = new Student("Bob", 20, 80.0f);
        Student student3 = new Student("Charlie", 19, 90.0f);

        treeSet.add(student1);
        treeSet.add(student2);
        treeSet.add(student3);

        for (Student student : treeSet) {
            System.out.println("Name: " + student.name + ", Age: " + student.age + ", Score: " + student.score);
        }
    }
}
  1. 首先定义了Student类,包含nameagescore属性。
  2. main方法中创建了TreeSet,并传入一个自定义的Comparator
  3. Comparatorcompare方法实现了按题目要求的排序逻辑:
    • 先比较age,年龄小的在前。
    • age相同则比较score,分数高的在前。
    • score也相同则按name的字典序排序。
  4. 最后向TreeSet中添加学生对象并遍历输出。