[英]Java compareTo method basics
我是Java的新手,并试图解决一些基本问题。 我的一位朋友让我解释这段代码可能出错的原因。 对我来说它看起来非常好。 我甚至尝试了它,它的工作原理。
你能帮助我吗?
public int compareTo(Object o){
Employee emp = (Employee) o;
return this.id - o.id;
}
我找不到任何好的解释。 id也是一个整数。
Comparable
是一个带有泛型的接口,因此它应该是Comparable<Employee>
。 (因此,您确定将员工与员工进行比较,而不是将员工与员工进行比较。)
Employee emp = (Employee) emp;
说得通?
您将emp
为Employee
并将其放入emp
。 也许你的意思是(Employee) o
return this.id - o.id;
你使用o
是Object
,而Object
没有.id
也许你的意思是emp.id
?
如果您确定id
是唯一的,并且没有整数溢出(这将需要否定id
),那么该代码应该按预期工作。 另一方面,如果两个Emp
(被认为是不同的)可以具有相同的id
(因为它不是我们期望它通过其名称的标识符),那么它可能导致两个Emp
被认为是相等的情况他们不是。
你没有使用emp实例做任何事情...如果你想把Employee
( this
)与Object o
,它总是一个Employee
,那么你想要return this.id - emp.id;
public int compareTo(Employee o){
return this.id - o.id;
}
如果你真的是一个坚持者:
public int compareTo(Object o){
long thisId = this.id;
long oId = o.id;
long result = thisId - oId;
if (result > Integer.MAX_VALUE) result = Integer.MAX_VALUE;
if (result < Integer.MIN_VALUE) result = Integer.MIN_VALUE;
return result;
}
当你无法保证id为正或负时,它变得棘手。 棘手的部分是,如果id变为负,则减法可能溢出并产生不正确的结果
class Employee implements Comparable<Employee> {
public int compareTo(Object o) {
if (o instanceof Employee) {
Employee emp = (Employee) o;
return this.id - emp.id;
}else {
throw new IllegalArgumentException("Parameter not of type Employee!");
}
return null;
}
}
我觉得没关系。 如果id为负,会出现什么问题?
compareTo()也是比较字符串时使用的保留函数。 所以也许他希望你注意到具有相同名称的方法可能会导致问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.