compareTo方法:对象arg?

时间:2013-04-19 00:32:50

标签: java arrays sorting

我正在尝试使用下面的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;
}

5 个答案:

答案 0 :(得分:1)

compareTo正在将thisarg进行比较,因此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例程如何订购这两个项目。