java中的compareTo()方法

本文通过一个示例介绍了如何在Java中对自定义数组进行排序,当Java没有提供比较方式时,可以通过实现Comparable接口并重写compareTo()方法来实现。博客详细展示了如何创建和初始化Student对象数组,并使用Arrays.sort()进行排序。此外,还解释了compareTo()方法在比较对象时的作用,通过比较返回值理解其工作原理。
摘要由CSDN通过智能技术生成
package string_test;

import java.util.Arrays;

/*
当我们想排序一个自定义的数组,Java又没有直接提供它们的比较方式时。我们可以 通过实现接口Comparable并重写compareTo()方法来添加对自定义数组的比较,然后通过Arrays的sort()方法来将这个数组排序。这样就可以快速完成你所需要的排序了。有些同学就要问了:为什么重写了compareTo()方法就可以通过Arrays.sort()来进行排序了,我们可以通过源码来解释:

Student{id=4, name='e', grade=12}
Student{id=1, name='b', grade=40}
Student{id=3, name='d', grade=55}
Student{id=0, name='a', grade=60}
Student{id=2, name='c', grade=80}
 */
public class Test3 {
    public static void main(String[] args) {
        //*************************************************************************
        //直接打印对象的时候将打印对象的toString()方法
        Student s0 = new Student();
        System.out.println(s0);//Student{id=null, name='null', grade=null}

        Student s1 = new Student(1, "刘德华", 5);
        System.out.println(s1);//Student{id=1, name='刘德华', grade=5}
        //*************************************************************************

        Student[] s = new Student[5];

        System.out.println(s);//[Lstring_test.Test3$Student;@17327b6
        System.out.println(s.toString());//[Lstring_test.Test3$Student;@17327b6
        System.out.println(s.getClass());//class [Lstring_test.Test3$Student;
        System.out.println(s.getClass().getName());//[Lstring_test.Test3$Student;

        s[0] = new Student(0, "a", 60);
        s[1] = new Student(1, "b", 40);
        s[2] = new Student(2, "c", 80);
        s[3] = new Student(3, "d", 55);
        s[4] = new Student(4, "e", 12);
        Arrays.sort(s);
        for (Student ss : s) {
            System.out.println(ss);
        }
        //*************************************************************************
        //Student类中的compareTo()方法的作用
        int compare_return1 = s[0].compareTo(s[1]);
        System.out.println(compare_return1);//打印结果: -1

        int compare_return2 = s[1].compareTo(s[0]);
        System.out.println(compare_return2);//打印结果: 1

    }

    public static class Student implements Comparable<Student> {
        private Integer id;
        private String name;
        private Integer grade;

        public Student() {

        }

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

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

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

        public Integer getGrade() {
            return grade;
        }

        public void setGrade(Integer grade) {
            this.grade = grade;
        }

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

        @Override
        public int compareTo(Student o) {
            /*
            compareTo()方法: 比较两个对象,this当前的比较对象; o表示被比较对象,:
            Student s1 = new Student();
            Student s2 = new Student();
            s1.compareTo(s2);//其中的s1就相当于当前的比较对象: this, s2就相当于被比较对象: o
             */
            return (this.getGrade() > o.getGrade()) ? 1 : -1;
        }
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值