java compare compareTo方法区别详解

CompareTo()是Java中一个比较方法,用于对两个对象进行比较。在Java中,对象可以比较大小。如果Object A比Object B大,则compareTo()会返回一个正值。如果Object A比Object B小,则compareTo()会返回一个负的值。如果两个Object相等,则返回0.

Java CompareTo方法区别详解

什么是Java CompareTo方法?

CompareTo()是Java中一个比较方法,用于对两个对象进行比较。在Java中,对象可以比较大小。如果Object A比Object B大,则compareTo()会返回一个正值。如果Object A比Object B小,则compareTo()会返回一个负的值。如果两个Object相等,则返回0.

为什么要使用CompareTo方法?

CompareTo()方法的主要目的是对象排序。它可以帮助我们对一个集合进行排序。例如,如果我们有一个保存学生列表的ArrayList,我们可以使用CompareTo()方法对它们按照学号进行排序。

CompareTo()方法的用法

我们来看一下如何使用CompareTo()方法

定义一个类

首先我们需要定义一个类。例如我们定义了一个名为Student的类,它有两个属性:学号和姓名。

public class Student implements Comparable<Student> {

    private String studentName;
    private int studentNumber;

    public Student(String studentName, int studentNumber){
        this.studentName = studentName;
        this.studentNumber = studentNumber;
    }

    // getters and setters

    @Override
    public int compareTo(Student otherStudent) {
        return this.studentNumber - otherStudent.studentNumber;
    }
}

实例化类

现在我们需要实例化这个类。

Student s1 = new Student("Tom", 100);
Student s2 = new Student("Jerry", 80);

比较两个对象的大小

比较两个对象的大小需要使用CompareTo()方法。

int result = s1.compareTo(s2);

如果s1的学号比s2大,则result是一个正值。如果s1的学号比s2小,则result是一个负值。如果两个学号相等,则result会是0.

CompareTo()方法的常见错误

在使用CompareTo()方法时,会经常犯一些错误,例如:

  1. 忘记实现Comparable接口

比如上面的例子,我们开头就写了Student类实现Comparable接口。如果忘记了这一步,程序就无法编译通过。

  1. 返回值错误

如果我们的CompareTo()方法返回值是一个负数,但是我们希望对象是相等的,那么就会出现问题。

示例说明

考虑一个Person类,它由姓名、年龄、身高三个属性组成。

public class Person implements Comparable<Person>{
    private String name;
    private int age;
    private int height;

    public Person(String name,int age,int height){
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
    public int getHeight(){
        return height;
    }

    @Override
    public int compareTo(Person o) {
        int compareResult= Integer.compare(this.age,o.getAge());
        if(compareResult==0){
            compareResult= Integer.compare(this.height,o.getHeight());
        }
        if(compareResult==0){
            compareResult= name.compareTo(o.getName());
        }
        return compareResult;
    }
}

我们创建了一个包含三个属性的Person类,并在compareTo()方法中通过三个属性的值作为排序的依据。

class PersonSortingUtility{
    public static void main(String[] args) {
        List<Person> personList =new ArrayList<Person>();
        personList.add(new Person("Mike",23,175));
        personList.add(new Person("John",20,174));
        personList.add(new Person("David",20,183));
        personList.add(new Person("Mike",25,175));

        System.out.println("Before sorting : " + personList);
        Collections.sort(personList,Person::compareTo);
        System.out.println("After sorting : " + personList);
    }
}

排序后结果为:

Before sorting : [Person{name='Mike', age=23, height=175}, Person{name='John', age=20, height=174}, Person{name='David', age=20, height=183}, Person{name='Mike', age=25, height=175}]
After sorting : [Person{name='David', age=20, height=183}, Person{name='John', age=20, height=174}, Person{name='Mike', age=23, height=175}, Person{name='Mike', age=25, height=175}]

可以看到,排序前按照添加的顺序输出,排序后按照age、height、name的顺序排序。

总结

通过这篇教程,我们学习了Java CompareTo()方法的用法和示例,可以帮助我们更好地理解Comparable接口和比较对象。

本文标题为:java compare compareTo方法区别详解

基础教程推荐