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