Java compareTo方法基础知识

时间:2014-07-03 17:43:13

标签: java

我对Java相对较新,并尝试解决一些基本问题。我的一位朋友让我解释这段代码可能出错的原因。 对我来说它看起来非常好。 我甚至尝试过它并且有效。

你们可以帮帮我吗?

public int compareTo(Object o){
   Employee emp = (Employee) o;
   return this.id - o.id;
}

我找不到任何好的解释。 id也是一个整数。

7 个答案:

答案 0 :(得分:3)

Comparable是具有泛型的接口,因此它应该是Comparable<Employee>。 (因此,您确定将员工与员工进行比较,而不是将员工与员工进行比较。)

Employee emp = (Employee) emp;

有意义吗?

您将emp投射到Employee并将其放入emp。也许你的意思是(Employee) o

return this.id - o.id;

您使用的oObject,而Object没有.id也许您的意思是emp.id

答案 1 :(得分:1)

如果您确定id是唯一的,并且没有整数溢出(这将需要否定id),那么该代码应该按预期工作。另一方面,如果两个Emp(被认为是不同的)可以具有相同的id(因为它不是我们期望它的名称的标识符),那么它可能导致这样的情况:两个Emp被认为是平等的,实际上它们不是。

答案 2 :(得分:1)

您没有使用emp实例执行任何操作...如果您尝试将Employeethis)与Object o进行比较,那么始终为{{ 1}},然后你想要Employee

答案 3 :(得分:0)

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;
}

答案 4 :(得分:0)

如果您无法保证ID为正或负,那就变得棘手了。棘手的部分是,如果id变为负数,则减法可能会溢出并产生不正确的结果

答案 5 :(得分:0)

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为负,会出现什么问题?

答案 6 :(得分:-2)

compareTo()也是比较字符串时使用的保留函数。所以也许他想让你注意到同名的方法会引起问题。