Java语言高分悬赏:在排序算法中,如果比较的是对象不是数字或者字符串,程序怎么实现呢

Java语言高分悬赏:在排序算法中,如果比较的是对象不是数字或者字符串,程序怎么实现呢

Java 的 Collections 集合工具中的排序方法会根据对象的 Comparator 接口进行排序的,字符串的比较操是基于字典顺序的:

List<String> list = new ArrayList<String>();
        list.add("a");
        list.add("A11");
        list.add("c");
        list.add("F");
        list.add("111");
        System.out.println(list);
        Collections.sort(list);
        System.out.println(list);

自己写一个比较方法不行了吗。你发代码出来说说你想怎么比较。

我们可能会比较一个对象,java中万物皆对象,比如定义一个学生类,然后按照其中某一属性进行比较,当然还有其他。依据这个给出以下代码:

1、首先定义一个学生类,包括姓名和年龄

public class Student {

    public Student(Integer age, String name) {
        this.age = age;
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    /**
     * 年龄
     */
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    /**
     * 姓名
     */
    private String name;


    @Override
    public String toString() {
        return "Student{" +
        "age=" + age +
        ", name='" + name + '\'' +
        '}';
    }
}

2、按照学生中的属性比如年龄实现排序

/**
     * 按照某一个属性排名降序
     * @param studentList 学生列表
     */
    public static void studentLengthCompareDesc(List<Student> studentList){
        Collections.sort(studentList,Comparator.comparingInt(Student::getAge).reversed());
    }
    /**
     * 按照某一个属性排名升序
     * @param studentList 学生列表
     */
    public static void studentCompareAsc(List<Student>studentList){
        Collections.sort(studentList, Comparator.comparingInt(Student::getAge));
    }

    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student(12,"a1"));
        students.add(new Student(14,"a2"));
        System.out.println("年龄升序:");
        studentCompareAsc(students);
        students.forEach(System.out::println);
        System.out.println("年龄降序:");
        studentLengthCompareDesc(students);
        students.forEach(System.out::println);
    }

3、测试结果


年龄升序:
Student{age=12, name='a1'}
Student{age=14, name='a2'}
年龄降序:
Student{age=14, name='a2'}
Student{age=12, name='a1'}

Process finished with exit code 0

ps:大佬,分币吧

Java里面有一个Comparable接口专门用于比较对象,我这里定义了一个学生类实现Comparable接口,通过重写compareTo()方法对学生的成绩进行比较,这里也可以比较其他属性年龄、学号之类,不过我没有定义,也可以对多个学生进行比较public int compareTo(Student otherStudent,Student ...),我这里这简单对两个学生比较。

public class Student implements Comparable<Student> {
    private String name;// 姓名
    private String courseName;// 课程名
    private double score;// 成绩

    public Student() {
        super();
    }

    public Student(String name, String courseName, double score) {
        super();
        this.name = name;
        this.courseName = courseName;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCourseName() {
        return courseName;
    }

    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return this.name + "\t" + this.courseName + "\t" + this.score;
    }
    @Override
    // 将一个同学与另一个同学进行比较
    public int compareTo(Student otherStudent) {
        // TODO Auto-generated method stub
        // 在compareTo()方法,用返回值来决定排序
        // 先定义一个result来判断比较的结果
        int result = 0;
        // 判断是否是同一个同学
        result = this.name.compareTo(otherStudent.getName());
        if (result == 0) {
            // 比较两个人的成绩(也可以比较其他属性年龄、学号之类),这里定义了成绩就比较成绩
            if (this.score == otherStudent.getScore()) {
                result = 0; // 成绩相等
            } else if (this.score < otherStudent.getScore()) {
                result = 1; // 第一人成绩更优
            } else {
                result = -1;
            }
        }
        return result;
    }
}

这里实例化连个学生张三和李四,对他们的成绩进行比较

public class Demo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Student s1 =new Student("张三","java",80.0);
        Student s2 =new Student("李四","python",90.0);

        if(s1.compareTo(s2)==0) {
            System.err.println("成绩相等");
        }else if (s1.compareTo(s2)==1) {
            System.out.println(s1.getName()+"成绩优于"+s2.getName());
        }else  {
            System.out.println(s2.getName()+"成绩优于"+s1.getName());
        }
    }
}

希望我的代码能对你有点帮助!

https://blog.csdn.net/qq_37937537/article/details/80445731 Java中对对象进行排序 简单明了