java - 使用 Equal 方法覆盖 CompareTo

标签 java

我正在尝试读取公司 vector ,如果两家公司名称相同,则返回 true,否则返回 false 我使用 ComapareTo 方法完成的。在我的方法中,将调用 Company 类中的“equals”方法。我的“等于”方法必须覆盖类 Object 中的相应方法。

我想知道是否可以使用 Equal 方法覆盖 CompareTo。如果是这样,我如何在 main 中检查它。

这个程序的目标是检查 vector 中的 2 家公司,如果是则返回 true 否则返回 false。这是我卡在 main 中的代码以对其进行测试。

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);

}

请原谅我,代码有点困惑,因为我只是在尝试不同的方法。

最佳答案

契约(Contract)compareTo根据 JavaDoc表明这一点:

The implementor must also ensure that the relation is transitive: (x.compareTo(y)>0 && > y.compareTo(z)>0) implies x.compareTo(z)>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 之前进行验证

关于java - 使用 Equal 方法覆盖 CompareTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5973264/

相关文章:

java - 在java中不使用math.pow的二进制到十进制

java - 实现远程代理

java - JProgressBar 多次 self 实例化

java - 在构造函数中设置 ThreadLocal 变量是否有效?

java - 在 Java 和 C 之间发送 int[]s

java - 请告诉我这个jsp程序哪里出错了

java - 将图像保存到外部数据库服务器

java - 注入(inject) @RequestScoped bean 两次作为不同的实例

java - 类对象 getter 上的 @ConditionalonExpression

java - 如何在获得许可后重新加载 Activity