繁体   English   中英

Java compareTo方法基础知识

[英]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;

说得通?

您将empEmployee并将其放入emp 也许你的意思是(Employee) o

return this.id - o.id;

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

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

你没有使用emp实例做任何事情...如果你想把Employeethis )与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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM