Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java compareTo方法:对象参数?_Java_Arrays_Sorting - Fatal编程技术网

Java compareTo方法:对象参数?

Java compareTo方法:对象参数?,java,arrays,sorting,Java,Arrays,Sorting,我正在尝试使用下面的compareTo方法对数组进行排序。我很难准确地理解它的作用。我也不知道objectarg指的是什么。有人能给我解释一下这个方法的具体用途和工作原理吗?下面的代码是我一直在使用的 public int compareTo (Object arg) { if (salary > ((Employee)arg).salary) return; else if (salary == ((Employee)arg).salary)

我正在尝试使用下面的compareTo方法对数组进行排序。我很难准确地理解它的作用。我也不知道objectarg指的是什么。有人能给我解释一下这个方法的具体用途和工作原理吗?下面的代码是我一直在使用的

public int compareTo (Object arg)
{
    if (salary > ((Employee)arg).salary)
        return;
    else if (salary == ((Employee)arg).salary)
        return 0:
    else 
        return -1;
}

首先,我假设第一个“return”实际上应该返回1


它所做的是返回订单。返回1表示对象“arg”应该位于当前对象之后(即,它应该具有更高的索引)。类似地,值-1表示它应该在前面,值0表示它是相等的,排序没有那么重要(尽管不同的排序算法对这些元素的行为可能不同,这是一个称为,因此,
arg
就是您要比较的对象。实际上,该代码似乎通过比较员工的工资来比较员工。 假设显示
return的行
意味着
返回1,代码可以写成

public int compareTo (Object arg)
{ 
    Integer thisSalary = this.salary;
    Integer otherSalary = ((Employee) arg).salary;
    return thisSalary.compareTo(otherSalary);
}

首先,有一个错误-第一次返回应该是
return1

public int compareTo (Object arg)
{
    if (salary > ((Employee)arg).salary)
        return 1;
    else if (salary == ((Employee)arg).salary)
        return 0:
    else 
        return -1;
}
现在,让我们看看代码

首先要注意的是,我们正在对一个契约进行编码——具体地说,是接口,它要求您有一个方法
compareTo
,该方法接受一个参数,将其称为
arg
,并返回一个int。如果
小于
arg
,则int必须为负数,如果
大于
arg
则为正值,如果
等于
arg
则为0

考虑到这一点,我们开始编码。我们只允许将Employee类与其他Employee进行比较,因此我们将对象
arg
转换为
Employee
。如果不是1,将抛出异常


然后,我们简单地将我们的工资与其工资进行比较,然后根据两名员工的订单返回1或0或-1。这使员工可以自然排序并进行排序,例如在
PriorityQueue
容器中以正确的顺序出现。

对象参数表示您的compareTo将接收任何对象,而不仅仅是员工对象。如果您想要比较不同类的两个对象,这可能很有用(假设您想要比较一个类人和一个类狗,如果它们都有相同的权重,则返回true)

在这种特定情况下,您将把arg强制转换为Employee,这意味着您将把特定对象视为Employee实例

我建议在代码之前添加一个“if(instanceof(Employee))”。这意味着您将只在arg确实是员工的情况下运行代码。(示例:if(instanceof(Dog))将阻止尝试将人转化为狗)。这很有用,因为尝试强制转换不兼容的类型将导致异常

我也不知道objectarg指的是什么


为了对项目数组进行排序,您必须能够获取其中一个项目并将其与另一个项目进行比较。为了对项目进行全面排序,需要进行许多这样的比较。compareTo()是在数组中所有项所属的类中定义的方法。compareTo()方法允许排序例程获取数组中的一项,并对该项调用compareTo()。compareTo()函数的参数是数组中的另一项。compareTo()方法的返回值告诉排序例程如何对这两个项目进行排序。

请在代码前添加一行,使其显示在代码块中:)谢谢!抱歉,我是新来的。这看起来像是将员工的对象salary(或其子类)与salary实例变量进行比较。对象arg是什么意思?请参阅-以了解实现compareTo的最佳实践