gpt4 book ai didi

java - 为什么值类的值是它的 hashCode "not a good idea"?

转载 作者:搜寻专家 更新时间:2023-10-31 19:54:48 24 4
gpt4 key购买 nike

Effective Java,第 2 版,J. Bloch第 9 项 的最后一段表示,对于 IntegerStringDate 等值类,返回该类的精确值的函数作为hashCode 不是个好主意

因此,类 Integer 返回它表示的整数的 value 作为其实例的 hashCode 并不是那么好。

hashCode() 也不是String 返回一个直接从整体内容映射的整数值,即 String 实例具有的字符。

这些 hashCode()-s 显然符合契约。

对我来说,这似乎是个好主意而不是坏主意——hashCode-s 随着值在对象之间的变化而变化,这些 hashCode 是在将它们散布到 HashMap/HashSet 的桶中之前“规范化”——这样条目的 hashCode-s 就不会对条目将进入哪个桶形成偏见。

我在这里遗漏了什么 - 是什么让将类值直接映射到 hashCode 成为“坏主意”?

TIA

//===========================

编辑

另请参阅 Steve Siebert 的回答下与此相关的评论。

最佳答案

它的意思是那些 javadoc 规范准确说明了 hashCode 是如何创建的。通过这样做,应用程序现在可以依赖于它始终为真......现在这些实现永远不会改变 hashCode 的生成方式。

这并不意味着你不应该从你的值(value)观中推导出你的散列......只是不要告诉人们你是如何在你的规范中做到这一点的=)

关于java - 为什么值类的值是它的 hashCode "not a good idea"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26821532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com