如何覆盖 compareTo()。如果可能的话


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

我的代码工作正常,当id是一个Integer,当是一个正值。id有可能是负值吗?如何更改代码呢?

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

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

你当前的版本几乎是正确的,除了它容易发生整数溢出

当您重写compareTo时,您可以定义这些问题的答案。这完全取决于您的程序是否可能使id为负值。你要问自己的问题是:"一本书比另一本书‘大’(或小)意味着什么?"如果答案是id越大的Book越大,那么您的实现就很好,除了一个小错误:

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

必须能够返回一个负值。从Comparable规范来看,如果

a.compareTo(b) > 0
然后

b.compareTo(a) < 0

否则不能使用compareTo()来建立订单

I make it work:D

return (this.id > bk.id ) ? -1: (this.id < bk.id) ? 1:0 ;

这是我想要的,但感谢您的回复

相关内容

最新更新