📜  Java中的可比与比较器(1)

📅  最后修改于: 2023-12-03 15:31:58.390000             🧑  作者: Mango

Java中的可比与比较器

在Java中,我们需要对对象进行比较,比如对一组数字进行排序。Java提供了两种方法来进行对象的比较:可比和比较器。

可比(Comparable)

Java中的可比接口是一个通用的接口,它允许我们对对象进行比较。我们只需要实现这个接口的compareTo()方法即可。

public interface Comparable<T> {
    public int compareTo(T o);
}

compareTo()方法接受一个参数,表示需要比较的对象。如果当前对象比传入对象小,返回负数;如果当前对象比传入对象大,返回正数;如果两个对象相等,返回0。

我们可以通过实现Comparable接口来使我们的对象具有可比性。例如,假设我们有一个Person类,我们可以让它实现Comparable接口,使它能够被排序。

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

    public int compareTo(Person person) {
        return this.age - person.age;
    }
}

在上面的例子中,我们通过实现compareTo()方法对Person对象进行比较。我们可以通过Collections.sort()方法来对Person对象按年龄进行排序。

List<Person> people = new ArrayList<Person>();
people.add(new Person(25, "John"));
people.add(new Person(20, "Mike"));
people.add(new Person(30, "Mary"));

Collections.sort(people);
比较器(Comparator)

有时候,我们需要对对象进行多种方式的比较,或者对不可修改的对象进行比较。这时候,我们可以使用比较器(Comparator)来进行比较。

比较器是一个单独的类,它实现了Comparator接口,只有一个compare()方法。

public interface Comparator<T> {
    public int compare(T o1, T o2);
}

compare()方法接受两个需要进行比较的对象并返回一个整数。如果第一个对象比第二个对象小,则返回一个负数;如果第一个对象比第二个对象大,则返回一个正数;如果两个对象相等,返回0。

我们可以通过实现Comparator接口来实现多种比较,例如下面的例子,我们通过Comparator接口实现了按姓名和年龄排序。

public class PersonComparator implements Comparator<Person> {
    public int compare(Person person1, Person person2) {
        int result = person1.getName().compareTo(person2.getName());
        if (result == 0) {
            result = person1.getAge() - person2.getAge();
        }
        return result;
    }
}

我们可以通过Collections.sort()方法并且将比较器作为参数来对Person对象进行排序。

List<Person> people = new ArrayList<Person>();
people.add(new Person(25, "John"));
people.add(new Person(20, "Mike"));
people.add(new Person(30, "Mary"));

PersonComparator comparator = new PersonComparator();

Collections.sort(people, comparator);

总结

在Java中,我们可以通过可比和比较器来对对象进行比较。我们可以通过实现Comparable接口来使对象具有可比性,也可以通过实现Comparator接口来实现多种方式的比较。