Java平台库Hashcode

pet*_*ter 5 java hashcode

在Effective Java Item 9中(覆盖hashCode时始终覆盖equals)它所说的位置

Java平台库中的许多类(如String,Integer和Date)在其规范中包含hashCode方法返回的实际值作为实例值的函数.这通常不是一个好主意,因为它严重限制了您在将来的版本中改进哈希函数的能力.

这是什么意思 ?

Lou*_*man 4

这意味着您无法在代码的更高版本中重写哈希函数以获得更好的哈希属性。例如,String.hashCode()功能很快……但不是很好。但它不能再改变了,因为哈希码是指定的,并且人们在自己的代码中依赖于该实现。

  • @Hiro2k - API 文档指定“String.hashCode()”是通过特定公式计算的。客户端代码可以使用该精确公式自由独立地计算哈希码,并假设它将与“String.hashCode()”返回的值相同。这对于纯 Java 代码来说似乎有些反常,但对于 JNI 来说确实有意义。在其他情况下,利用 API 指定的额外知识可能是有意义的。 (3认同)