我读到这些方法返回值的规则是,对于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;
};
不
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正在尝试(失败)处理此问题。
任何负数都可以表示
有什么理由使用数学吗。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),而不管其输入如何,那么您使用的是错
您将得到一个由n个整数组成的数组,包括负数和正数。您需要将数组划分为正数和负数。将数组的所有正整数添加到一个数组(或任何数据结构),并将所有负数添加到另一个数组(或任何数据结构)。如果输入数组的第一个元素是正数,则在输出的第一行中按给定顺序打印所有正数,然后在输出的第二行中按给定顺序打印所有负数,反之亦然。 笔记: 将0视为正数。 输出中的正负数字应该遵循给定数组中元素的顺序。输出的每一行中的每个
问题内容: 比较两个数组并返回差值的最快/最佳方法是什么?非常类似于PHP。有一个简单的功能,还是我必须创建一个via ?还是循环? 问题答案: 如果您希望在JQuery中做到这一点,希望对您有所帮助。 最后的警报提示不常见元素数组Array,即2个数组之间的差。 请让我知道我是否错过了任何事情,干杯! 码
我有一个布尔方法正在对字符串进行一些错误检查。我有一个int类常量叫“numwords”=8。我将一个字符串传递给布尔方法,在该方法中,我使用.split和.length对字符串进行单词计数。一个名为“words”的int计算字符串中的单词数。完成之后,我要执行一个if语句,比较单词和数字单词。如果它们的数目相等,则返回true,否则为false。我试过==和.等于,但都没用。有什么想法吗? 我试
问题内容: 我了解这是作为双重链接列表实现的。它在add和remove上的性能优于,但在get和set方法上却较差。 这是否意味着我应该选择在插入? 我写了一个小测试,发现插入速度更快。那如何链表比? 请参考下面的示例。 问题答案: Linkedlist确实在插入时速度更快,问题出在您的示例中。在您的代码中,您一直都需要附加到末尾。对于ArrayList,它与LinkedList一样容易。您应该做