一、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方法的用法,可以为我们后续的排序等操作提供帮助。