Java 如何重写compareTo()。如果是';有可能

Java 如何重写compareTo()。如果是';有可能,java,Java,当id是一个整数并且是一个正值时,我的代码工作正常。id是否可能为负值?如何更改代码?以下可能是实现此功能的最简单方法: public int compareTo(Object obj){ Books bk = (Books) bk; return this.id - obj.id; } 您当前的版本几乎是正确的,只是它容易受到整数溢出的影响。以下可能是实现它的最简单方法: public int compareTo(Object obj){ Books bk = (Books

id
是一个
整数
并且是一个正值时,我的代码工作正常。
id
是否可能为负值?如何更改代码?

以下可能是实现此功能的最简单方法:

public int compareTo(Object obj){
   Books bk = (Books) bk;
   return this.id - obj.id;
}

您当前的版本几乎是正确的,只是它容易受到整数溢出的影响。

以下可能是实现它的最简单方法:

public int compareTo(Object obj){
   Books bk = (Books) bk;
   return this.id - obj.id;
}

您当前的版本几乎是正确的,只是它容易受到整数溢出的影响。

当您覆盖
compareTo
时,您可以定义这些问题的答案。它完全取决于您的程序
id
是否可能为负值。你必须问自己的问题是“一本书比另一本书大(或小)意味着什么?”。如果答案是哪个id更大的是一本更大的书,那么您的实现是好的,除了一个小错误:

public int compareTo(Object obj) {
   Books bk = (Books)obj;
   return Integer.compare(this.id, bk.id);
}

当您覆盖
compareTo
时,您可以定义这些问题的答案。它完全取决于您的程序
id
是否可能为负值。你必须问自己的问题是“一本书比另一本书大(或小)意味着什么?”。如果答案是哪个id更大的是一本更大的书,那么您的实现是好的,除了一个小错误:

public int compareTo(Object obj) {
   Books bk = (Books)obj;
   return Integer.compare(this.id, bk.id);
}

必须能够返回负值。根据
可比
规范,如果

public int compareTo(Object obj){
   Books bk = (Books) obj;
   return this.id - bk.id;
}
然后

b.与(a)相比<0

否则,您无法使用
compareTo()
建立订单

您必须能够返回负值。根据
可比
规范,如果

public int compareTo(Object obj){
   Books bk = (Books) obj;
   return this.id - bk.id;
}
然后

b.与(a)相比<0
否则,您无法使用
compareTo()
来建立订单

我成功了:D

return(this.id>bk.id)-1:(this.id

这是我想要的,但谢谢你的回复,我成功了:D

return(this.id>bk.id)-1:(this.id


这正是我想要的,但谢谢你的回复

我会使用“goes before”或“goes after”比“Bigger”好,但无论如何+1。我会使用“goes before”或“goes after”比“Bigger”好,但无论如何+1。你在使用Java 1.4吗
Comparable
是从Java5开始泛化的。您使用的是Java1.4吗<代码>Comparable
是从Java 5开始泛化的。您的原始实现与此一样有效。@SJuan76不完全有效。如果id可能非常大,减法可能会给出不同的结果,可能由于环绕而不正确。例如,Integer.MAX_值(-3)为负数。进行比较总是有效的。您的原始实现与此一样有效。@SJuan76不完全有效。如果id可能非常大,减法可能会给出不同的结果,可能由于环绕而不正确。例如,Integer.MAX_值(-3)为负数。进行比较总是有效的。