讲解hashCode()与equals()方法间的关联及使用要点。
1、 hashCode相同,对象不一定相等,还需通过equals进一步判断。
2、 第一张图显示的是test.java文件内容
3、 第二张图对比了两个Test类的差异。
4、 当equals()返回true时,hashCode()的值未必相等(图1展示test类,图2显示比较结果)。
5、 可以重写类的 hashCode() 和 equals() 方法,自定义其返回值,以满足特定的比较和哈希计算需求。
6、 如下图
7、 当两个对象通过equals()方法比较返回true时,它们的hashCode()必须一致。这是确保哈希表等数据结构正常工作的基本约定,若违反此规则可能导致对象无法正确存储或检索,因此在重写equals()时,必须同步重写hashCode()以保持一致性。
8、 所示
9、 当两个对象通过equals()比较结果为false时,其hashCode()值并不要求必须不同,但为了提升哈希表的性能,建议返回不同的哈希码。若哈希码相同,可能增加哈希冲突,影响查找效率。因此,尽管规范不强制要求,良好的实践应尽量使不相等对象拥有不同的hashCode值,从而优化散列表的存取性能,提高整体运行效率。
10、 重写equals()方法时,必须同时重写hashCode()方法,以确保当两个对象通过equals()判断相等时,它们的hashCode值也相同。这是为了维护哈希相关集合类(如HashMap、HashSet)的正确行为,避免因散列不一致导致数据存储或查找异常,二者需协同重写以保持逻辑统一。
