gpt4 book ai didi

java - 比较器和比较器之间的区别?

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

我的理解是Comparator可以比较来自不同类的多个对象,而Comparable只能比较一个对象与同一类中的另一个实例。

比较(对象1)比较(对象1,对象2)

以上解释是否属实?

最佳答案

并非如此。
ComparableComparator是泛型接口(interface),允许比较泛型(包括子类)中定义的类型的实例。

它们之间的主要区别是Comparable直接在要比较对象的类中实现。

因此,如果您有一种方法来比较类中的实例,那就是它们有一个自然顺序,Comparable是正确的做法。
另一方面,如果您有多种方法来比较类中的实例,Comparable还不够。
您应该使用Comparator s 相反(如果不存在自然顺序)或使用两者(如果存在自然顺序和一些其他类型的顺序)。

<小时/>

示例,其中 Comparator除了 Comparable 之外也很有用:

String类实现Comparable通过按字典顺序比较两个字符串。假设您需要对 List 进行排序的String根据不同的规则:它们的长度。
您需要定义 Comparator<String>实现此规则的例如:

public class StringLengthComparator implements Comparator<String> {

@Override
public int compare(String o1, String o2) {
return Integer.compare(o1.length(), o2.length());
}

}

现在您可以排序String通过使用它们的自然顺序(使用 Comparable ):

List<String> strings = new ArrayList<>();
...
strings.sort();

但您也可以使用特定的 Comparator<String> :

strings.sort(new StringLengthComparator());

或者不使用 lambda 创建任何类:

strings.sort((o1,o2)->Integer.compare(o1.length(), o2.length()));
<小时/>

示例,其中 Comparator应该使用而不是 Comparable :

假设您有 Account代表银行帐户的类。
从功能上讲,您没有自然的顺序来对它们进行排序,而是根据客户的需求有多个顺序。使类实现Comparable没有意义。但创造了独特的Comparator<Account>会。

<小时/>

Comparator 的情况可以使用:

如果要为无法更改源代码的类的实例定义顺序(JDK 类或第三方类),Comparator是遵循的方法。

关于java - 比较器和比较器之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59785957/

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