gpt4 book ai didi

java - 如何编写一个常规的 equals() 方法,可能与 hashCode() 一起使用?

转载 作者:太空宇宙 更新时间:2023-11-04 06:11:42 25 4
gpt4 key购买 nike

你会如何编写 equals() 方法?我需要能够编写一个可用的程序来比较程序中的扑克牌。我使用 NetBeans 来编写代码。

我还倾向于注意到 equals() 方法通常与 hashCode() 方法一起使用。 hashCode 的确切用途是什么以及它们应该如何编写?

那么,如果我需要的话,我应该如何编写一个常规的 equals() 方法和 hashCode() 方法呢?

<小时/>

我将发布我昨天完成的两个 equals() 方法,如果有人特别需要有关我的程序的其他信息,请告诉我,我将添加其余部分。

这是我当前的设置,不幸的是它总是会打印出相同的输出(错误)。

@Override
public boolean equals(Object otherObject)
{
boolean set = false;
if (!(otherObject instanceof PlayingCard))
{
set = false;
}

if (otherObject == this)
{
set = true;
}
System.out.println(set);
return set;
}

这是(我认为)我使用的原始 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 方法应该比较确定相等的对象的属性。

因此,第二个版本比第一个版本更有意义(因为第一个版本仅测试引用相等性,这已经在 Object 类的默认实现中完成)。

不过,您可以有一个更清晰的实现:

@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 由需要哈希函数的数据结构(HashSetHashMap 等)使用。它决定了元素在此类数据结构中的存储位置,因此,如果两个对象相等,它们必须具有相同的 hashCode。

换句话说,您的 hashCode 实现应与 equals 实现匹配,例如,如果 a.equals(b)a.hashCode() == b.hashCode()。因此,在您的示例中,hashCode 应该是 suitrank 属性的函数。

例如:

@Override
public int hashCode ()
{
return Objects.hash(suit,rank);
}

关于java - 如何编写一个常规的 equals() 方法,可能与 hashCode() 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28646631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com