compareble接口里怎么什么都没写

12 阅读1分钟

如果你在 Comparable 接口的类中看到 compareTo() 方法没有实际的实现,这通常是因为它是一个抽象方法,需要在实现 Comparable 接口的具体类中进行重写。这个方法的目的: 是让类的实例能够进行比较,以便在集合类中进行排序或者其他需要比较对象顺序的操作。

我会在下一期博客中提到什么情况下需要我们进行重写,若是看完本篇博客还未理解的朋友可以关注一下,下一篇 博客方法一定要被重写的四种情况 - 掘金 (juejin.cn)

让我们来看一个示例,假设有一个 Person 类实现了 Comparable 接口,我们想要通过年龄来比较这些人:

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

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

    @Override
    public int compareTo(Person other) {
        return Integer.compare(this.age, other.age);
    }
}

在这个例子中,compareTo 方法被重写,根据 Person 对象的年龄来比较它们。这里使用了 Integer.compare 方法来比较整数值,它返回一个负数、零或者正数,分别表示当前对象小于、等于或者大于传入对象。

使用这种实现方式,你可以通过年龄来比较 Person 对象,例如在集合中进行排序:

List<Person> people = new ArrayList<>();
people.add(new Person("Alice", 30));
people.add(new Person("Bob", 25));

Collections.sort(people); //排序

for (Person person : people) {
    System.out.println(person.getName() + " : " + person.getAge());
}

在上述代码中,Collections.sort(people) 使用了 compareTo 方法来对 people 列表中的 Person 对象进行排序,输出结果将按年龄升序排列。