举例什么时候需要重写hashcode
时间: 2023-10-22 08:03:40 浏览: 77
java中为何重写equals时必须重写hashCode方法详解
在Java中,当我们使用HashMap、HashSet或Hashtable等集合类时,需要重写hashCode方法。因为这些集合类内部使用了哈希表数据结构,而哈希表的实现依赖于hashCode方法的正确性。
如果两个对象相等,那么它们的hashCode值必须相同;反之,如果两个对象的hashCode值相同,它们并不一定相等。因此,我们在重写equals方法的同时也要重写hashCode方法,以保证对象的相等性和哈希码的一致性。
举个例子,如果我们定义了一个Person类,其中包含了name和age两个属性:
```java
public class Person {
private String name;
private int age;
// 构造函数、getter和setter方法等省略
}
```
如果我们想要将Person对象放入HashMap中,并根据name作为键值,那么我们需要重写hashCode方法:
```java
public class Person {
private String name;
private int age;
// 构造函数、getter和setter方法等省略
@Override
public int hashCode() {
return Objects.hashCode(name);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return Objects.equals(name, person.name);
}
}
```
这里使用了Objects.hashCode和Objects.equals方法,它们可以处理null值,而不会抛出NullPointerException异常。这样,当我们将多个Person对象放入HashMap中时,它们会根据name属性进行哈希,以实现快速的查找和获取。
阅读全文