Java compareTo方法:对象参数?
我正在尝试使用下面的compareTo方法对数组进行排序。我很难准确地理解它的作用。我也不知道objectarg指的是什么。有人能给我解释一下这个方法的具体用途和工作原理吗?下面的代码是我一直在使用的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)
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的最佳实践