java - 是否可以使用hashCode作为内容唯一ID?

标签 java hashcode hash-code-uniqueness

我需要比较两个大字符串。除了使用这样的 equals 方法之外,是否有一种类似 hashCode 或其他方法可以为 String 生成唯一 id 的方法? 那是因为我的字符串非常大。另外,我需要独特的内容唯一 ID。可以使用 hashCode出于我的目的,在字符串中。

最佳答案

hashCode 的目的是提供一种快速方法来识别大多数两个对象比较不相等的情况。在大多数情况下,具有 1% 误报率的哈希函数被认为优于具有 0% 误报率的哈希函数,但所需时间是其两倍。

有一些哈希函数被设计用作“摘要”,因此任意长度的两个不同字符串非常不太可能具有相同的摘要。然而,为了非常有效,摘要需要比 32 位哈希码值大得多。精心设计的 64 字节(512 位)摘要通常足以很好地保护任何长度的字符串,以至于在同一个周末,当一个人赢得五张州彩票时,他更有可能被闪电击中两次,而不是找到两张产生相同摘要的不同字符串。为字符串计算一个好的摘要函数的成本将远远大于将该字符串与另一个字符串进行比较的成本,但如果每个字符串将与许多其他字符串进行比较,则计算每个摘要函数一次并将其与每个字符串的摘要进行比较其他字符串可能会带来重大的性能提升。

关于java - 是否可以使用hashCode作为内容唯一ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60856505/

相关文章:

Java:自动 equals() 和 hashCode()

java - 使用 hashcode() 对数组长度取模返回空指针异常

java - Hashmap<key, value> 具有相同的输入并实现了 equals 和 hashcode 方法,但我没有收到重复键的错误?

Java 为两个可互换的整数覆盖 equals() 和 hashcode()

algorithm - Tinyurl 风格的唯一代码 : potential algorithm to prevent collisions

java - Android内存使用和对象引用

java - 建议…JavaServer Faces(JSF),Struts,model2和其他

java - 通过中兴通讯 GSM 调制解调器将短信立即转发到电脑

java - 如何将时间转换为字符串或整数

c# - 复杂对象图的快速哈希码