我最近发现下面的代码最终会出现哈希冲突。
仅供参考,我正在使用XCode 9.4.1(9F2000),它使用Swift 4.1.2
import Foundation
let lhs = "あいうえおあいう21あいうえ"
let rhs = "あいうえおあいう22あいうえ"
let percentEncodedLhs = lhs.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)!
let percentEncodedRhs = rhs.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)!
let lhsHashValue = lhs.hashValue
let rhsHashValue = rhs.hashValue
let lhsPercentHashValue = percentEncodedLhs.hashValue
let rhsPercentHashValue = percentEncodedRhs.hashValue
print(lhsHashValue == rhsHashValue)
print(lhsPercentHashValue == rhsPercentHashValue)
/*
Output:
false
true
*/
我知道哈希冲突可能在某些情况下发生,但我无法找到Swift如何为String计算hashValue。
例如,Java计算String的hashCode,如:https://docs.oracle.com/javase/6/docs/api/java/lang/String.html#hashCode()
有官方解释或假设吗?
但是我找不到Swift如何为String计算hashValue
你为什么不能? Swift是开源的。如果您有兴趣,请阅读来源。