gpt4 book ai didi

java - 在单个类中实现比较器和比较器接口(interface) : Pros and Cons

转载 作者:行者123 更新时间:2023-12-02 04:27:18 25 4
gpt4 key购买 nike

这是我遇到的一个非常独特的问题(也许有人一定有过)。有人问我,我们可以在一个类中同时实现Comparable接口(interface)和Comparator接口(interface)吗?我有轻微的暗示这可能是可能的。由于我以前从未尝试过这样的事情...我自己检查了..因此发布了这个问题,以便其他人在这里快速找到它。

最佳答案

从技术上讲,您可以这样做,但这将是不好的做法。当类实现 Comparable 时,意味着该类具有自然顺序。例如,值类(例如 Integer)实现了 Comparable,因此您只需将它们的列表传递到 Collections.sort 即可获得预期的结果结果。

另一方面,Comparator 基本上被设计为当您需要为其他类创建一些自定义排序时用作匿名类。或者为没有自然排序的类提供排序。

在某些情况下,除了自然顺序之外,类还应该有其他顺序。处理这种情况的最佳方法是在此类中创建静态常量比较器。例如,如果您有一个包含 nameage 的类 Person,您可以按名称进行自然排序,并添加额外的比较器来对 Persons 进行排序年龄。

     class Person implements Comparable<Person> {

public static final Comparator<Person> BY_AGE_COMPARATOR = new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.age < o2.age ? -1 : (o1.age == o2.age ? 0 : 1);
}
};

private int age;
private String name;

@Override
public int compareTo(Person o) {
return name.compareTo(o.name);
}
}

这种方法更好,因为您不需要类的实例来访问它的比较器。您还可以根据需要向类中添加任意数量的其他比较器。

总而言之,当类实现Comparator时,通常意味着对某些实体进行排序是此类的主要目的。实现Comparable意味着可以使用某种自然顺序对此类的实例进行排序。让类同时实现 ComparableComparator 意味着您有自然的排序顺序。这没有道理。

关于java - 在单个类中实现比较器和比较器接口(interface) : Pros and Cons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26016467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com