重写equals之后如何重写hashcode
时间: 2024-09-13 09:04:51 浏览: 49
在Java中,重写equals方法后,通常也需要重写hashCode方法。这是因为Java集合类如HashMap和HashSet等依赖于hashCode方法来判断对象的相等性。具体来说,当两个对象通过equals方法比较为相等时,它们的hashCode方法也必须返回相同的值,这是Object类中hashCode方法的通用约定之一。
重写hashCode方法时,应该遵循以下原则:
1. 在程序执行期间,只要对象的equals方法的比较操作所用到的信息没有被修改,多次调用hashCode方法应该返回同一个整数。
2. 如果两个对象通过equals方法比较是相等的,那么这两个对象的hashCode方法也必须返回相同的值。
3. 不要求equals方法返回false的对象必须返回不同的hashCode值,但为了提高散列性能,应该尽可能地为不相等的对象返回不同的值。
下面是一个简单的hashCode方法实现示例:
```java
@Override
public int hashCode() {
// 使用对象的某个属性作为哈希码计算的基值
final int prime = 31;
int result = 1;
// 根据对象的关键属性计算哈希码
result = prime * result + ((attribute == null) ? 0 : attribute.hashCode());
return result;
}
```
这个方法使用了31这个特殊的质数作为乘数,因为它是奇质数,并且可以通过移位和减法来获得更好的性能。
阅读全文