概念:hashCode() 的作⽤是获取哈希码,也称为散列码;它实际上是返回⼀个 int 整数。这个哈希码的 作⽤是确定该对象在哈希表中的索引位置。Object 的 hashcode ⽅法 是本地⽅法,也就是⽤ c 语⾔或 c++ 实现的,该⽅法通常⽤来将对象的 内存地址 转换为整数之 后返回。
为什么重写equals()方法时必须重写hashCode()方法?
因为有约定:两个对象值相等时,hashCode值必须相等。这个约定是为了HashMap等利用hashCode值做关键字的数据结构进行快速比较。对象比较直接利用equals()开销较大,但是如果有次约定,可以先比较hashCode值,有一样hashCode值的对象在利用equals()进行比较。节省开销,加速比较。
怎么重写hashCode()方法?
1.利用Objects.hash方法
public static int hash(Object... values) {
return Arrays.hashCode(values);
}
public static int hashCode(Object a[]) {
if (a == null)
return 0;
int result = 1;
for (Object element : a)
result = 31 * result + (element == null ? 0 : element.hashCode());
return result;
}
2.自己重写,遍历属性的hash值,不断*31+上一个属性hasah值(乘31是因为JVM会处理成位运算,计算速度快)