八股文——JAVA基础:hashCode()方法的作用与意义以及与equals方法的联动
hashCode()
方法的作用是根据对象的属性生成散列码,用于散列表快速定位存储桶位置。
散列码本身并不能唯一标识对象,不同对象可能会有相同的散列码(即发生哈希冲突)。
在 HashMap
或 HashSet
等基于散列表的数据结构中,当两个对象的 hashCode 相同,会进一步用 equals
方法判断它们是否真正相等。对于 HashSet
,如果 equals
返回 true,则拒绝重复插入;对于 HashMap
,则覆盖已有 key 的 value。如果 equals
判断为不同,则通过链表或红黑树的方式解决冲突。
在容量不足时,散列表还会触发 rehash,重新分配桶位置以提升性能。
equals进行重写后,hashcode也需要重写,比如:
现在有一个类student,student有一个成员变量id,此时equals重写为:id相同时student相同。
但是现在hashcode并不知道,当遇到id相同但内容不同的两个student,hashcode会产生两个不同的散列码,这样就违背了相同的对象的散列码相同的准则。