使用Swift的内置字符串hashValue生成哈希值时,我们发现了两个不同的字符串生成相同哈希值的情况......但是碰撞的原因非常复杂..
取这两个字符串:
var str1 = """
00000000000000
00000000000000
00000000000000
00000000000000
00000000000000
00000000100000
00000000000000
00000000000
""" //Contains a single 1 character
var str2 = """
00000000000000
00000000000000
00000000000000
00000000000000
00000000000000
00000000000000
00000000000000
00000000000
""" //Contains only zeroes
str1 == str2 // false
str1.hashValue == str2.hashValue // true ..WAT?
很想明白这里发生了什么......
由于
答案 0 :(得分:5)
在Hashable协议上查看Apple的官方文档。它说:
由类型的hashValue属性提供的哈希值是一个整数,对于同等比较的任何两个实例都是相同的。也就是说,对于同一类型的两个
a
和b
实例,如果a == b
,则为a.hashValue == b.hashValue
。 反之则不然:具有相同哈希值的两个实例不一定彼此相等。
您还可以阅读此post
获取更多信息答案 1 :(得分:2)
不要假设具有相同哈希值的两个项目相同。 发生这种情况是因为您对各个哈希值进行异或但是异或 值本身给出零(A ^ A = 0)。
也许这篇文章会给你答案
https://useyourloaf.com/blog/swift-hashable/
干杯,