可能重复:
why do String.hashCode() in java is not implemented in a way with less conflicts?
对于非加密哈希,Java的String.hashCode()
如何执行?
主要是我担心碰撞。
感谢。
答案 0 :(得分:4)
您似乎误解了.hashCode()
关于Java的问题,更具体地说,是.equals()
指定的.hashCode()
/ java.lang.Object
合同。
任何人对事物合同的唯一部分是,如果两个对象在.equals()
方面相同,那么它们必须具有与.hashCode()
返回的相同的哈希码。 该合同没有其他义务。
因此,编写这样的自定义.hashCode()
实现是完全合法的,即使这可能是人们想不到的:
@Override
public int hashCode()
{
// Legal, but useless
return 42;
}
当然,JDK开发人员永远不会那么厚,内置类型的.hashCode()
实现(包括String
)足够好,甚至不需要担心关于碰撞。即便如此,这种实现很可能会因JDK实现而异,并且其“加密值”也是如此。
但那不是重点。
最重要的考虑因素是.hashCode()
与加密完全无关。它唯一的义务是遵守java.lang.Object
定义的合同。
答案 1 :(得分:0)
它作为通用哈希函数非常好。即你通常不用担心它。
特别是:
int
范围内生成分布均匀的哈希值。显然,它不是加密哈希函数,所以不要使用它。此外,请注意,您可能将获取哈希冲突,因为它会产生32位哈希。因此,您只需设计算法即可将其考虑在内。