dabocaiqq
2020-04-14 17:23
采纳率: 66.6%
浏览 112

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

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

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • 毕小宝 2020-04-22 07:05
    已采纳

    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);
    
    已采纳该答案
    打赏 评论
  • chriswww3838 2020-04-14 17:37

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

    打赏 评论
  • shy078 2020-04-14 17:53

    我们可能会比较一个对象,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:大佬,分币吧

    打赏 评论
  • Guns N' Roses97 2020-04-14 23:10

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

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

    打赏 评论
  • BMKB 2020-04-15 09:05

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

    打赏 评论

相关推荐 更多相似问题