在我的项目中,如果我们在hashCode()和equal()方法中包含集合字段,我已经看到了性能问题。是否必须包含?以下是示例程序。
Student.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;
}
}
答案 0 :(得分:2)
对于equals()
和hashCode()
的实施方式,没有“强制性”要求。好吧,我将在下面提到一个小问题。您可以以对应用程序有意义的任何方式实现它们。看起来您只需要考虑学生的身份证号码,因为这是学生的独特之处。当然,名字和父母并不是唯一的。
请确保equals()
和hashCode()
基于相同的字段,以便您完成所需的合同(这是此唯一的“必需”方面)。