我正在尝试使用下面的compareTo方法对数组进行排序。我很难理解它究竟是做什么的。我也没有得到Object arg指的是什么。任何人都可以向我解释这种方法的作用及其工作原理吗?以下代码是我一直在使用的代码......
public int compareTo (Object arg)
{
if (salary > ((Employee)arg).salary)
return;
else if (salary == ((Employee)arg).salary)
return 0:
else
return -1;
}
答案 0 :(得分:1)
compareTo
正在将this
与arg
进行比较,因此arg
就是您要比较的内容。实际上,这段代码似乎通过比较员工的工资来比较员工。
假设说return;
的行是return 1;
,代码可以写成
public int compareTo (Object arg)
{
Integer thisSalary = this.salary;
Integer otherSalary = ((Employee) arg).salary;
return thisSalary.compareTo(otherSalary);
}
答案 1 :(得分:1)
首先,出现错误 - 第一次返回应为return 1
。
public int compareTo (Object arg)
{
if (salary > ((Employee)arg).salary)
return 1;
else if (salary == ((Employee)arg).salary)
return 0:
else
return -1;
}
现在,让我们看一下代码。
首先要注意的是我们正在编写一个合同 - 特别是Comparable接口,它要求你有一个方法compareTo
,它接受一个参数,称之为{{1} },并返回一个int。如果arg
小于this
,则int必须为负数;如果arg
大于this
,则为int;如果arg
等于this
则为0 }。
考虑到这一点,我们开始编码。我们允许将Employee类与之比较的唯一事情是其他Employees - 所以我们将对象arg
转换为arg
。如果它不是一个,则会抛出异常。
然后,我们只是将薪水与薪水进行比较,并根据两名员工的订单返回1或0或-1。这允许员工进行自然排序并进行排序,以便在Employee
容器中以正确的顺序出现。
答案 2 :(得分:0)
首先,我假设第一个'return'应该实际返回1.
它正在做的是返回一个订单。通过返回1,它表示对象'arg'应该在当前对象之后(即它应该具有更高的索引)。类似地,值-1表示它应该BEFORE,值0表示它是相等的并且排序无关紧要(尽管不同的排序算法可能与这些元素的行为不同,属性称为{ {3}})。
答案 3 :(得分:0)
Object arg表示您的compareTo将接收任何对象,而不仅仅是Employee对象。如果你想要比较不同类的两个对象,这可能很有用(想象你想比较一个Person类和一个类Dog,如果它们都具有相同的权重则返回true)。
在这种特定情况下,您将把arg强制转换为Employee,这意味着您将特定对象视为Employee实例。
我建议在代码之前添加“if(instanceof(Employee))”。这意味着只有在arg真的是员工的情况下才会运行您的代码。 (例如:if(instanceof(Dog))会阻止尝试将Person转换为Dog)。这很有用,因为尝试转换不兼容的类型会导致异常。
答案 4 :(得分:0)
我也不知道Object arg所指的是什么
为了对一系列项目进行排序,您必须能够抓取其中一个项目并将其与另一个项目进行比较。需要进行许多这样的比较以便对物品进行完全分类。 compareTo()是您在类中定义的数组中所有项目所属的方法。 compareTo()方法允许sort例程获取数组中的一个项目并在该项目上调用compareTo()。 compareTo()函数的参数是数组中的另一个项。 compareTo()方法的返回值告诉sort例程如何订购这两个项目。