您的位置:

Java中compareTo方法详解

一、compareTo方法概述

compareTo是Java中Object类中的一个方法,它的作用是比较两个对象的大小关系。compareTo方法属于Java语言中的内置比较器,常用于排序、查找等操作中。该方法在Java中被广泛的应用,既可以用于普通的对象比较,也可以用于基本数据类型的比较。

二、compareTo方法的基本用法

Java中String类和日期类均实现了compareTo方法,我们可以用这两种类型来模拟compareTo方法的基本用法。

    /**
     * String类型compareTo方法的用法
     */
    String str1 = "abc";
    String str2 = "def";
    String str3 = "abc";
    System.out.println(str1.compareTo(str2)); // 输出-3,因为'a'的ASCII码为97,'d'的ASCII码为100,97-100=-3
    System.out.println(str1.compareTo(str3)); // 输出0,因为两个字符串相等
    /**
     * Date类型compareTo方法的用法
     */
    Date date1 = new Date("2019/01/01");
    Date date2 = new Date("2019/01/02");
    System.out.println(date1.compareTo(date2)); // 输出-1,date1早于date2

三、compareTo方法的返回值

compareTo方法的返回值表示两个对象的大小关系,可能返回三种结果:负整数、零和正整数。

1、如果一个对象小于另一个对象,则返回值为负整数。

2、如果两个对象相等,则返回零。

3、如果一个对象大于另一个对象,则返回值为正整数。

    /**
     * compareTo方法返回值的用法
     */
    String str1 = "abc";
    String str2 = "def";
    String str3 = "abc";
    System.out.println(str1.compareTo(str2)); // 输出-3,因为'a'的ASCII码为97,'d'的ASCII码为100,97-100=-3
    System.out.println(str1.compareTo(str3)); // 输出0,因为两个字符串相等
    System.out.println(str2.compareTo(str1)); // 输出3,因为'd'的ASCII码为100,'a'的ASCII码为97,100-97=3

四、重写compareTo方法

如果自定义的类需要比较大小,或在排序算法中使用,就要重写compareTo方法。重写compareTo方法时,需要满足三个条件:

1、a.compareTo(b)和b.compareTo(a)的结果必须互为相反数。

2、如果a.compareTo(b)返回0,则a和b应该相等。

3、如果a.compareTo(b)返回正数,b.compareTo(c)返回正数,则a.compareTo(c)也应该返回正数。

    /**
     * 重写compareTo方法的用法
     */
    public class Student implements Comparable {
        private int age;

        public Student(int age) {
            this.age = age;
        }

        // 重写compareTo方法,按照年龄从小到大排序
        @Override
        public int compareTo(Student o) {
            return this.age - o.age;
        }
    }

    public static void main(String[] args) {
        Student s1 = new Student(18);
        Student s2 = new Student(20);
        Student s3 = new Student(16);
        List
    students = new ArrayList<>();
        students.add(s1);
        students.add(s2);
        students.add(s3);
        Collections.sort(students); // 按照年龄排序
        for (Student s : students) {
            System.out.println(s.age);
        }
    }

   
  

五、总结

compareTo方法是Java语言中内置的比较器,不仅可以用于普通对象的比较,也可以用于基本数据类型或日期类型的比较。重写compareTo方法时,需要满足三个条件,否则在排序中可能会出现异常。通过学习compareTo方法的用法,可以为我们后续的排序等操作提供帮助。