hashCode() 能每次返回随机数吗?
先说出你的答案
定义边界、关键机制、一个反例;P8题再补容量、失败与验证。
查看完整题解
参考回答
直接回答
不能在每次调用时随意返回一个新随机数。相关状态不变时,同一对象的 hashCode 应保持一致;equals 相等的不同实例也必须返回相同哈希值。按调用次数变化的随机值会破坏这些约定,使哈希容器的查找失去可靠依据。
讲清原理
如果放入 HashMap 时得到一个值,查找时又随机得到另一个值,就像每次都换书架编号,容器可能去错位置。问题不在“随机算法”四个字,而在一致性和等价对象必须一致。
“构造时随机一次,之后固定”只解决了同一实例的稳定性,未必满足两个逻辑相等实例之间的一致性。哈希应基于与你的 equals 语义匹配的信息,而不是为了看起来分散就引入不受约束的随机性。
例子与易错点
错误思路是 return new Random().nextInt();。值对象通常对选定字段使用合适的组合算法,或者让 record、IDE 生成配套实现,再检查字段语义。即使某次随机结果恰好一致,也不能证明实现符合约定。
相关题:第 5 题、第 37 题、第 40 题。
和评分标准对照,你能独立回答到哪一步?
自评会安排下一次复习,不保存你的口述内容。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。