Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Equal方法重写CompareTo_Java - Fatal编程技术网

Java 使用Equal方法重写CompareTo

Java 使用Equal方法重写CompareTo,java,Java,我试图读入一个公司向量,如果两个公司名称相同,则返回true,否则返回false,这是我使用ComapareTo方法所做的。在我的方法中,它将在类Company中调用“equals”方法。我的“equals”方法必须重写类对象中的相应方法 我想知道的是,是否可以使用Equal方法重写CompareTo。如果是这样,我怎样才能在main中检查它 该程序的目标是检查向量中的2家公司,如果是,则返回true,否则返回false。下面是我被困在main中测试它的代码 public class Compa

我试图读入一个公司向量,如果两个公司名称相同,则返回true,否则返回false,这是我使用ComapareTo方法所做的。在我的方法中,它将在类Company中调用“equals”方法。我的“equals”方法必须重写类对象中的相应方法

我想知道的是,是否可以使用Equal方法重写CompareTo。如果是这样,我怎样才能在main中检查它

该程序的目标是检查向量中的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);

}
公共类公司实施可比{
/**
*@param args
*/
私有字符串cName;
公共字符串getName()
{
返回cName;
}
公共内部比较(b公司)
{
如果(this.cName==b.cName)
{
System.out.println(“从比较到真实”);
返回1;
}
其他的
{
System.out.println(“从比较到错误”);
返回0;
}
}
公共布尔相等(对象o)
{
if(o公司实例)
{
公司c=(公司)o;
如果(此.cName.等于(c.cName))
{
System.out.println(“从相等的真值”);
返回true;
}
}
System.out.println(“从相等到错误”);
返回false;
}
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
向量v=新向量();
公司obj1=新公司();
公司obj2=新公司();
v、 添加(“力拓”);
v、 添加(“必和必拓”);
v、 添加(“必和必拓”);
v、 添加(“CBA”);
收集.分类(五);
系统输出打印Ln(v);
}

代码有点纠结请原谅我刚才尝试了不同的方法。

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

根据的
比较合同表明:

实现者还必须确保关系是可传递的(x.compareTo(y)>0&>y.compareTo(z)>0)意味着x.compareTo(z)>0

所以你的问题的答案是-不,你不能。在你的情况下:
比较(“A”,“B”)==1
比较(“B”,“A”)==1
,这意味着首先使用==检查对象的相等性是不应该的;用

if(this.cName.equals(b.cName)){
对于compareTo,只需返回字符串的compareTo即可

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

@Ted compareTo用于与自己的类对象进行比较,是吗?所以我要做的是检查cName是否等于自己的名称对象。这样我可以检查向量是否有更smiler的公司名称。如果这不是检查compareTo的实现方法,你会怎么做?只需使用
等于
来检查向量是否ready包含一个同名的公司;它已经告诉你你想知道什么。为什么要费心做
compareTo
来做
等于
已经做的工作呢?你似乎误解了
compareTo()的方式
有效。如果两个对象相等,则应返回
0
。除其他不好的事情外,还使用
=
比较两个字符串。这在正常情况下是错误的,并且您的示例可能符合“正常情况”。说使用
=
“不应该这样做”有点过分了。确实,
=
检查对象标识,这通常与对象相等性不同。但是,它可以是相等性测试的第一步(在对象针对自身进行测试的情况下缩短更昂贵的测试),或者(与
对象.equals
一样)作为相等性的完整定义。
public int compareTo(Company b)
{
    return this.cName.compareTo(b.cName);
}