【发布时间】:2014-11-08 20:05:04
【问题描述】:
Effective Java, 2nd Edn, J. Bloch Item 9 的最后一段
说,对于像Integer、String、Date 等值类,
返回该类的确切值的函数
hashCode 不是一个好主意。
因此,类Integer 返回它所代表的整数的value 作为其实例的hashCode 并不是那么好。
String 的 hashCode() 也不是直接从整体内容(即 String 实例所具有的字符)映射的整数值。
这些hashCode()-s 明显符合合同。
对我来说,这似乎是一个好主意而不是一个坏主意——hashCode-s 会随着对象的值而变化,而这些 hashCodes 在它们被分散到HashMap/HashSet-- 的桶,这样条目的 hashCode-s 不会对条目将进入哪个桶形成偏差。
我在这里缺少什么 - 是什么让将类值直接映射到 hashCode 是一个“坏主意”?
TIA
//============================
编辑
请参阅 Steve Siebert 对此的回答下的 cmets。
【问题讨论】:
标签: java hash hashmap hashcode