使用Equal方法覆盖CompareTo

时间:2011-05-12 04:22:37

标签: java

我试图在公司的矢量中读取并且如果两个公司具有相同的名称则返回true,否则返回false,否则我使用ComapareTo方法。在我的方法中,将在类公司中调用“equals”方法。我的“equals”方法必须覆盖Object类中的相应方法。

我想知道的是可以使用Equal方法覆盖CompareTo。如果是这样,我怎样才能在main中查看。

该计划的目标是检查向量中的2家公司,如果是,则返回true,否则为false。这是我主要测试它的代码。

public class Company implements Comparable <Company> {

/**
 * @param args
 */
private String cName;



public String getName()
{
    return cName;
}

public int compareTo(Company b)
{
    if(this.cName == b.cName)
    {
        System.out.println(" from compareTo true");
        return 1;
    }

    else
    {
        System.out.println(" from compareTo false");
        return 0;
    }
}

public boolean equal(Object o)
{
    if (o instanceof Company)
    {
        Company c = (Company) o;
        if(this.cName.equals(c.cName))
        {
            System.out.println(" from equal true");
                return true;
        }
    }
    System.out.println(" from equal false");
    return false;
}

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Vector<String> v = new Vector<String>();

    Company obj1 = new Company();
    Company obj2 = new Company();

    v.add("Rio tinto");
    v.add("BHP");
    v.add("BHP");
    v.add("CBA");

    Collections.sort(v);

    System.out.println(v);

}

代码有点纠结,原谅我只是尝试不同的方法。

3 个答案:

答案 0 :(得分:4)

根据JavaDoccompareTo合同表明了这一点:

  

实现者还必须确保关系传递 :( x.compareTo(y)&gt; 0&amp;&amp;&gt; y.compareTo(z)&gt; 0)暗示x。的compareTo(Z)&GT; 0

所以问题的答案是 - 不,你不能。在你的情况下: compare("A","B") == 1compare("B","A") == 1这意味着"A"<"B""B"<"A"自然不是真的也不是传递的。

如果您想节省时间,请执行compareTo并在equals内使用它。 像这样:

public boolean equals(Object o)
{
    // ... Some stuff you need to complete here first
    return this.compareTo(o) == 0;
}

当然compareTo会期望Company类型的对象 - 因此您必须在将其发送到compareTo

之前进行验证

答案 1 :(得分:2)

我强烈建议不要采用这种方法。 compareTo方法应返回一个整数,表示对象的相对顺序。合同(部分)指明a.compareTo(b)0返回a.equals(b)时完全返回true。但是,当a.equals(b)返回false时,a.compareTo(b)b.compareTo(a)应返回符号相反的非零整数 。你的实现不会这样做。

答案 2 :(得分:0)

首先使用==来检查对象的相等性是不应该的;用

替换它
if(this.cName.equals(b.cName)){

用于比较你可以简单地返回字符串的compareTo

public int compareTo(Company b)
{
    return this.cName.compareTo(b.cName);
}