当前位置: 首页 > 知识库问答 >
问题:

比较和比较的负和正返回值To

罗伟志
2023-03-14

我读到这些方法返回值的规则是,对于obj1.compareTo(ob2),例如,如果ob2在层次结构中位于ob1之下,则返回值为负值,如果它位于ob1之上,则返回值为正(如果它等于,则返回值为0)。然而,在我的类中,我看到了使用Math.signum在compareTo方法中获得-1(表示负值)和1(表示正值)的示例。

有什么原因吗?

编辑:

以下是我的意思:

Comparator comp = new Comparator() {
   public int compare(Object obj1, Object obj2) {
       Book book1 = (Book) obj1;
       Book book2 = (Book) obj2;

       int order = book1.getAuthor().compareTo(book2.getAuthor());
       if (order  == 0) {
          order = (int) Math.signum(book1.getPrice() - book2.getPrice());
       }
   return order;
};

共有3个答案

魏彦
2023-03-14

PS:实现中经常出现的错误是使用减法

public int compareTo(Object o) {
     OurClass other = (OurClass)o; //Skip type check

     return this.intField - other.intField;
}

这是错误的,因为如果调用新的OurClass(Integer.MIN\u值)。compareTo(new OurClass(Integer.MAX\u VALUE))会出现溢出。可能是数学。abs正在尝试(失败)处理此问题。

别锐
2023-03-14

任何负数都可以表示

弘承业
2023-03-14

有什么理由使用数学吗。signum公司

是的,有。

order = (int) Math.signum(book1.getPrice() - book2.getPrice());

假设你已经用这个替换了上面的行

order = (int)(book1.getPrice() - book2.getPrice());

现在让我们假设

book1.getPrice() returns 10.50 
book2.getPrice() returns  10.40

若不使用signum,则永远不会有任何编译时或运行时错误,但order的值将为0。这意味着book1等于book2,这在逻辑上是错误的。

但如果使用signum,订单的值将是1,这意味着book1

但必须提到的是,永远不要对比较函数返回值1和-1之间的值做出任何假设。你们可以阅读比较器的官方文件http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html.

 类似资料:
  • 我们知道,在数学中有很多用于比较大小的运算符。 在 JavaScript 中,它们的编写方式如下: 大于 / 小于:a > b,a < b。 大于等于 / 小于等于:a >= b,a <= b。 检查两个值的相等:a == b,请注意双等号 == 表示相等性检查,而单等号 a = b 表示赋值。 检查两个值不相等。不相等在数学中的符号是 ≠,但在 JavaScript 中写成 a != b。 在本

  • 问题内容: 比较器内部的返回值实际上是什么意思? 例如 : 如果返回类型为1,则其实际返回 [20、10、30、100] 如果返回类型为-1,则其实际返回 [100,30,10,20] 如果返回类型为0,则其实际返回 [20] 请告诉我这表示什么? 问题答案: 返回值(不是类型是)告诉调用者(对数据进行排序的事物): 如果始终为比较器返回相同的值(o,1,-1),而不管其输入如何,那么您使用的是错

  • 问题内容: 我了解这是作为双重链接列表实现的。它在add和remove上的性能优于,但在get和set方法上却较差。 这是否意味着我应该选择在插入? 我写了一个小测试,发现插入速度更快。那如何链表比? 请参考下面的示例。 问题答案: Linkedlist确实在插入时速度更快,问题出在您的示例中。在您的代码中,您一直都需要附加到末尾。对于ArrayList,它与LinkedList一样容易。您应该做

  • 问题内容: 我正在比较JSON和BSON用于序列化对象。这些对象包含多个大量整数的数组。在我的测试中,我要序列化的对象包含大约12,000个整数的总数。我只对序列化结果的大小比较感兴趣。我正在使用JSON.NET作为进行序列化的库。我使用JSON是因为我也希望能够在Javascript中使用它。 JSON字符串的大小约为43kb,BSON结果的大小为161kb。差异因子约为4。这不是我所期望的,因

  • 问题内容: 我想知道哪个更快:XML和JSON?什么时候使用哪一个? 问题答案: 在回答何时使用哪一个之前,有一点背景知识: 编辑:我应该提到,这种比较实际上是从在具有JavaScript的浏览器中使用它们的角度来看的。这也不数据格式的方法 有 被使用,并且有很多很好的解析器,这将改变细节,使我在说什么不是很有效的。 JSON既更紧凑,又(在我看来)更具可读性-在传输中,仅因为传输的数据较少,它就

  • 问题内容: 假设我需要使用按某些域逻辑排序的元素。通过这种逻辑,不相等的元素的顺序无关紧要,因此compare方法可以返回0,但是在这种情况下,我不能将它们放入。 所以,问题是:这样的代码有什么缺点: 更新 : 好。如果它应该永远是方法之间的一致性,并且,作为@SPFloyd - seanizer和其他人说。如果我删除接口并移入此逻辑是否会更好甚至更好(我可以在不破坏封装的情况下做到这一点)?因此