我正在尝试读取公司 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") == 1
和 compare("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/