hashmap重写hashcode方法
时间: 2023-11-02 14:24:42 浏览: 54
当你使用HashMap时,重写hashCode()方法是非常重要的。HashMap使用hashCode()方法来计算键的散列码,以确定在哈希表中的存储位置。如果hashCode()方法没有被正确地重写,可能会导致键在哈希表中产生冲突,这会影响HashMap的性能和可靠性。
重写hashCode()方法的准则如下:
1. 如果两个对象通过equals()方法比较相等,那么它们的hashCode()方法必须返回相同的值。也就是说,如果两个对象相等,则它们的散列码必须相等。
2. 如果两个对象通过equals()方法比较不相等,那么它们的hashCode()方法应该返回不同的值。也就是说,不相等的对象应该有不同的散列码。
以下是一个示例,展示了如何重写hashCode()方法:
```java
public class MyClass {
private int id;
private String name;
// 构造函数、getter和setter方法省略
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || getClass() != obj.getClass())
return false;
MyClass other = (MyClass) obj;
return id == other.id && Objects.equals(name, other.name);
}
}
```
在上面的示例中,我们使用id和name属性来计算hashCode()值,并在equals()方法中比较它们是否相等。这样做可以确保当两个对象的id和name属性相同时,它们的hashCode()值也相同。
请注意,为了保证hashCode()方法的正确性,必须遵循以上两个准则,同时还需要重写equals()方法。