hashCode() 有什么用,与 equals() 有什么关系?
查看完整题解
参考回答
直接回答
hashCode() 返回一个 int 类型的哈希值,供 HashMap、HashSet 等哈希结构使用。它与 equals() 的核心约定是:在相关状态没有改变的前提下,相等对象必须给出相同哈希值;不同对象可以发生碰撞。哈希值不是身份证,不要求全局唯一。
讲清原理
equals 回答“这是不是我找的那个逻辑值”,hashCode 帮助回答“先去哪个候选区域找”。把两者搭配使用,既要保证结果正确,也希望把不同的键较均匀地分散开。
同一个对象的相等性相关字段发生变化后,哈希值可能变化。因此,拿可变对象作键时要格外小心。反过来,即使一个 hashCode 总返回常数,也可能满足基本正确性约定,只是会把大量对象挤到同一候选范围,影响性能。
例子与易错点
String a = new String("key");
String b = new String("key");
System.out.println(a.equals(b)); // true
System.out.println(a.hashCode() == b.hashCode()); // true
hashCode 的一致性通常针对同一次程序执行中的有关状态,不是“任何对象在所有机器、所有运行中都得到同一个稳定业务编号”。需要业务标识时应明确设计字段。
相关题:第 5 题、第 11 题、第 39 题、第 41 题、第 57 题。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。