重写hash和equls
时间: 2023-05-24 09:06:10 浏览: 56
重写hash和equals方法是为了实现自定义对象的比较。equals方法比较对象是否相等,而hash方法则返回对象的哈希值以进行快速查找。
重写equals方法需要注意以下几点:
1. 对象相等必须满足以下条件:自反性(x.equals(x)应该返回true),对称性(x.equals(y)和y.equals(x)结果应该相同),传递性(如果x.equals(y)为true,y.equals(z)为true,则x.equals(z)也应该为true),一致性(多次调用返回结果应该相同),非空性(x.equals(null)应该返回false)。
2. equals方法中应该使用instanceof运算符,以避免传入的参数不是同一类型。
3. 对于复合类型的对象,应该递归调用equals方法进行比较。
重写hash方法需要注意以下几点:
1. 如果两个对象相等,它们的哈希值应该相同。
2. hash方法的返回值应该保证在散列表中均衡分布,以避免大量的哈希冲突。
3. hash方法的计算应该基于对象的不可变属性,例如id、name等。
以下是一个示例代码:
```java
public class Person {
private int id;
private String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person) o;
return id == person.id &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
}
```