gpt4 book ai didi

java - 比较器中的 CompareTo

转载 作者:行者123 更新时间:2023-12-01 19:32:36 27 4
gpt4 key购买 nike

我有一个关于compareTo函数如何协助比较器进行排序的问题即 o1.compareTo(o2) 与 o2.compareTo(o1)

如果两个字符串相等,则此方法返回 0,否则返回正值或负值。如果第一个字符串按字典顺序大于第二个字符串,则结果为正,否则结果为负。

上面的语句很简单,但是为什么 o1.compareTo(o2) 会给我升序,而 o2.compareTo(o1) 给我降序?

如果我有整数值“5,10,3”,则使用 o1.compareTo(o2) 得到 3,5,10,后者则相反

String str1 = "Negan";  
String str2 = ""; //empty string

//it would return the length of str1 in positive number
str1.compareTo(str2); // 5

//it would return the length of str1 in negative number
str2.compareTo(str1); //-5

按照这个逻辑,使用上面的代码,对于 str1.compareTo(str2) 我应该有一个升序,其中按字母顺序排列的更大的数字在后面,但是如果 str1 作为“”而 str2 是“Negan”,会发生什么。当 1 与 2 进行比较时是否设置了某种规则 -> 意味着如果值为负,则将其放置在开头,如果为正,则将其放置在末尾?或者,如果compareTo是str2.compareTo(str1),如果值为负,则将其放置在末尾,如果为正,则将其放置在开头,同时考虑参数 (str1, str2) 与(str2, str1) 其中各自的compareTo订单将执行相同的操作,只是str1.compareTo(str2) = str2.compareTo(str1)。

编辑:简单来说,如果参数可以互换并且二进制形式将执行相同的操作,则返回的值如何确定定位。

最佳答案

a.compareTo(b)如果a < b小于零,您可以将其读作“a 在 b 之前”。 a.compareTo(b)如果 a > b 则大于零,即“a 在 b 之后”。

也就是说,对其中一个对象调用compareTo,并以另一个对象作为参数。它的作用是报告“this”对象是否小于/等于/大于“argument”对象。

请注意a.compareTo(b)等于 - b.compareTo(a)

现在是比较器。 Comparator.compare(a, b)应该报告“a”和“b”的顺序,因此必须(对于升序)调用 a.compareTo(b)而不是b.compareTo(a) -- 因为前者会导致正确的结果:如果 a 在 b 之前,则结果为负;如果 a 在 b 之后,则结果为严格正。

所以,如果你写的比较器是 compare(a, b)来电 a.compareTo(b)你会得到升序;如果它调用 b.compareTo(a)您将得到降序排列。

关于java - 比较器中的 CompareTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59122411/

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