gpt4 book ai didi

java - hashCode() 和 equal() 方法中是否必须包含 Hashset 等集合类型字段

转载 作者:行者123 更新时间:2023-12-02 02:19:08 25 4
gpt4 key购买 nike

在我的项目中,如果我们在 hashCode() 和 equal() 方法中包含集合字段,我发现了性能问题。是否强制包含?下面是示例程序。

学生.java

public class Student {
int no;
String name;
String adress;
Set < Parent > parent;
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((adress == null) ? 0 :
adress.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + no;
result = prime * result + ((parent == null) ? 0 :
parent.hashCode());
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (adress == null) {
if (other.adress != null)
return false;
} else if (!adress.equals(other.adress))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (no != other.no)
return false;
if (parent == null) {
if (other.parent != null)
return false;
} else if (!parent.equals(other.parent))
return false;
return true;
}

}

最佳答案

对于如何实现 equals()hashCode() 没有“强制性”要求。好吧,我将在下面提到一个小小的要求。您可以采用对您的应用程序有意义的任何方式来实现它们。看起来您只需要考虑学生的 ID 号,因为这就是学生的独特之处。当然,名字和 parent 并不是独一无二的。

只需确保 equals()hashCode() 都基于相同的字段,这样您就可以满足所需的契约(Contract)(这是唯一“必需”的方面)这个)。

关于java - hashCode() 和 equal() 方法中是否必须包含 Hashset 等集合类型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48781804/

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