众所周知,Java 会生成大约 40 亿个唯一哈希码。
我正在使用一些字符串的哈希码(例如 Fname + Lname + DOB + DATE),它成为我的数据库的主键
在 @PrePersist 中,我使用 Hashcode 设置它,这有助于我为新用户生成 Hashcode。(必须是唯一的)。
现在我的代码用完了。对我来说可能的替代方法是使用 SHA-2 , MD5 等。
我怎样才能增加哈希码的大小并避免大的冲突。
众所周知,Java 会生成大约 40 亿个唯一哈希码。
我正在使用一些字符串的哈希码(例如 Fname + Lname + DOB + DATE),它成为我的数据库的主键
在 @PrePersist 中,我使用 Hashcode 设置它,这有助于我为新用户生成 Hashcode。(必须是唯一的)。
现在我的代码用完了。对我来说可能的替代方法是使用 SHA-2 , MD5 等。
我怎样才能增加哈希码的大小并避免大的冲突。
我认为您对使用 int Object.hashCode() 感到困惑,您可以覆盖它并返回一个 int 并使用安全哈希函数。这是两件事。Object.hashCode 不打算返回唯一的整数(返回 1 是有效的实现)。因此,将 String.hashCode() 用于对象标识并不是一个好主意,因为它可以并且将会发生冲突。它旨在与例如 HashTables 一起使用;这意味着它针对性能而不是避免碰撞进行了优化。
如果您想要某种内容哈希,您确实可以使用 sha1、sha2、sha3 或 md5。如果没有,请使用 SecureRandom 或 UUID 生成随机的东西。所有这些发生碰撞的概率都非常低(当然不完全是 0)。