Java 如何使用book equals()方法(可能使用hashCode()编写一个函数?
如何编写equals()方法?我需要能够写一个在程序中比较扑克牌有用的一个。我正在使用NetBeans编写代码 我还注意到equals()方法通常与hashCode()方法一起出现。hashCode到底要做什么,应该如何编写 那么,如果需要的话,我应该如何编写一个a by book equals()方法和一个hashCode()方法呢Java 如何使用book equals()方法(可能使用hashCode()编写一个函数?,java,oop,netbeans,equals,hashcode,Java,Oop,Netbeans,Equals,Hashcode,如何编写equals()方法?我需要能够写一个在程序中比较扑克牌有用的一个。我正在使用NetBeans编写代码 我还注意到equals()方法通常与hashCode()方法一起出现。hashCode到底要做什么,应该如何编写 那么,如果需要的话,我应该如何编写一个a by book equals()方法和一个hashCode()方法呢 我将发布我昨天完成的两个equals()方法,如果有人特别需要关于我的程序的其他信息,请告诉我,我将添加其余的 这是我当前的设置,不幸的是,它总是打印出相同的输
我将发布我昨天完成的两个equals()方法,如果有人特别需要关于我的程序的其他信息,请告诉我,我将添加其余的 这是我当前的设置,不幸的是,它总是打印出相同的输出(false) 这是(我认为)我最初使用的equals()方法
@Override
public boolean equals(Object otherObject)
{
if (otherObject == null)
{
System.out.println("Match");
return false;
}
if (getClass() != otherObject.getClass())
{
System.out.println("Match");
return false;
}
System.out.println("No Match, True");
PlayingCard other = (PlayingCard) otherObject;
return suit.equals(other.suit) && rank == other.rank;
}
equals方法应该比较确定相等性的对象的属性 因此,第二个版本比第一个版本更有意义(因为第一个版本只测试引用相等,这已经在对象类的默认实现中完成) 不过,您可以使用更干净的实现:
@Override
public boolean equals(Object otherObject)
{
if (otherObject == null)
{
return false;
}
if (!(otherObject instanceof PlayingCard))
{
return false;
}
if (this == otherObject) {
return true;
}
PlayingCard other = (PlayingCard) otherObject;
return suit.equals(other.suit) && rank == other.rank;
}
hashCode
由需要哈希函数的数据结构使用(HashSet
,HashMap
等)。它确定元素将存储在这些数据结构中的何处,因此,如果两个对象相等,则它们必须具有相同的哈希代码
换句话说,您的hashCode
实现应该与equals
实现匹配,这样如果a.equals(b)
那么a.hashCode()==b.hashCode()
。因此,在您的示例中,hashCode
应该是suit
和rank
属性的函数
例如:
@Override
public int hashCode ()
{
return Objects.hash(suit,rank);
}
对于任何生产代码,我总是使用apache EqualBuilder和HashCodeBuilderDoes Objects.hash,它们来自Java SE API或外部库?我刚刚在这里输入了代码来尝试,但我通过netbeans收到了错误通知。首先,它找不到这些<代码>其他<代码>和<代码>对象<代码>符号/变量,以及那些<代码>!otherObject对一元运算符不好,尤其是
@SIHB007您应该导入java.util.Objects
(假设您使用java 7或更高版本编译代码)!otherObject是一个输入错误,我忘记了括号。另一个也是输入错误-我将编辑答案。@SIHB007修复了输入错误。@hexafraction java.util.Objects自java 7以来就在java SE API中。
@Override
public int hashCode ()
{
return Objects.hash(suit,rank);
}