【知识点】hashcode和equals
哈希计算(Hashing)是一种将数据通过哈希函数(Hash Function)转换成固定长度的值(hash value)的过程,是一个通用的计算方式。
在Java中的表现就是hashcode()
方法,在Object
类上,常用于HashMap
、HashSet
等集合中,用于快速查找、唯一约束等作用。
equals()
方法是从逻辑上判断两个对象是否相等,如果两个对象相等,那么他们的哈希值也应该相等。
反之则不是必然,哈希值相等的两个对象不一定相等,即hashcode()
方法返回相同值但是equals()
返回false,这就是哈希冲突
因此重写equals()
时必须重写hashcode()
,这样可以保证在使用哈希表等基于哈希值的数据结构时能够正常工作。
一个学生类重写equals和hashcode方法的例子
public class Student {
private Long id;
private String name;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return Objects.equals(id, student.id) && Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
}